R中作为输出文件名的多个输入文件名 [英] Multiple input filenames as output filenames in R

查看:39
本文介绍了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中作为输出文件名的多个输入文件名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆