多个输入文件名作为 R 中的输出文件名
Multiple input filenames as output filenames in R
我正在尝试通过光栅包中的简单计算操作(将温度从开尔文转换为摄氏度)在 R 中处理数千张 GeoTIFF 图像。
计算正常,但我需要原始输入文件名作为输出,以便之后分配图像。
使用我当前的代码,仅获取列表中的第一个文件名,并不断覆盖输出文件。
包含要使用的路径的完整文件列表'calc':
library(raster)
files <- list.files(path="myInputPath",
pattern="1km.tif$",
full.names=T)
不带命名输出数据路径的文件名列表:
filenames <- list.files(path="myInputPath",
pattern="1km.tif$",
full.names=F)
处理数据和命名输出的两个循环:
for(j in seq(filenames)){
for(i in seq(files)){
celsius <- calc(x=raster(files[i]), fun=function(x){x*0.02-273.15})
writeRaster(celsius,
filename=paste0("myOutputPath",#path where the data should be stored
filenames[j],#filenames from list
"_celsius",#suffix to distinguish from input data
".tif"),
overwrite=T)
}
}
哎呀,您是否意识到每个文件的处理次数与文件的处理次数一样多?也就是说,两个循环内部执行i^j
次(即i^2
),虽然你只需要它执行i
次。
这个怎么样(没真正测试过):
infiles <- list.files(path="myInputPath",
pattern="1km.tif$",
full.names=TRUE)
outfiles <- file.path("myOutputPath", paste0(basename(infiles), "_celsius.tif"))
for (j in seq_along(infiles)) {
celsius <- calc(x=raster(infiles[j]), fun=function(x) x*0.02-273.15)
writeRaster(celsius, filename=outfiles[j], overwrite=TRUE)
}
我正在尝试通过光栅包中的简单计算操作(将温度从开尔文转换为摄氏度)在 R 中处理数千张 GeoTIFF 图像。
计算正常,但我需要原始输入文件名作为输出,以便之后分配图像。
使用我当前的代码,仅获取列表中的第一个文件名,并不断覆盖输出文件。
包含要使用的路径的完整文件列表'calc':
library(raster)
files <- list.files(path="myInputPath",
pattern="1km.tif$",
full.names=T)
不带命名输出数据路径的文件名列表:
filenames <- list.files(path="myInputPath",
pattern="1km.tif$",
full.names=F)
处理数据和命名输出的两个循环:
for(j in seq(filenames)){
for(i in seq(files)){
celsius <- calc(x=raster(files[i]), fun=function(x){x*0.02-273.15})
writeRaster(celsius,
filename=paste0("myOutputPath",#path where the data should be stored
filenames[j],#filenames from list
"_celsius",#suffix to distinguish from input data
".tif"),
overwrite=T)
}
}
哎呀,您是否意识到每个文件的处理次数与文件的处理次数一样多?也就是说,两个循环内部执行i^j
次(即i^2
),虽然你只需要它执行i
次。
这个怎么样(没真正测试过):
infiles <- list.files(path="myInputPath",
pattern="1km.tif$",
full.names=TRUE)
outfiles <- file.path("myOutputPath", paste0(basename(infiles), "_celsius.tif"))
for (j in seq_along(infiles)) {
celsius <- calc(x=raster(infiles[j]), fun=function(x) x*0.02-273.15)
writeRaster(celsius, filename=outfiles[j], overwrite=TRUE)
}