从目录中的文件自动创建对象

时间:2017-06-28 17:53:49

标签: r automation r-raster

我正在尝试在R脚本中自动执行数据提取过程,该脚本从定期更新的目录中提取数据。

总体框架遵循此过程

library(sp)
library(rgdal)
library(raster)

f1.t1.cir <- stack("../raster/field1/f1_cir_t1.tif")
f1.t1.NDVI <- stack("../raster/field1/f1_ndvi_t1.tif")
f1.t1.RGB <- stack("../raster/field1/f1_ndvi_t1.tif")

f1.dat <- c(f1.t1.cir, f1.t1.NDVI, f1.t1.RGB)

for (i in f1.dat){
  plotRGB(i)
}

我想直接从目录生成每个f1.t1.cir类型对象,这样当我添加新的TIFF文件f1_cir_t2.tif时,r脚本将创建一个对象f1.cir.t2

我正在尝试使用像

这样的东西
a <- list.files(path= "../raster/field1", pattern = "\\.tif$")
b <- gsub("_", "\\.", a)

for (i in a) {
  assign(get(b[(which(a==i))]), stack((paste("../raster/field1/", i,sep=""))))
}

此时,我会将所有tiff文件作为R工作区中的堆叠多波段栅格对象。

我收到以下错误,

Error in get(b[(which(a == i))]) : object 'f1_t1_DSM.tif' not found

我无法弄清楚这是否是一个get()问题,或其他什么。

供参考

> a
[1] "f1_t1_DSM.tif"  "f1_t1_NDVI.tif"

> b
[1] "f1.t1.DSM.tif"  "f1.t1.NDVI.tif"

我觉得这很有用。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

@joran,很棒的建议......

f1.t1<-list()

for(i in list.files(path= "../raster/field1", pattern = "\\.tif$")){
  f1.t1[[i]]<-stack((paste("../raster/field1/", i, sep="")))
}

工作得很好,无需更改名称。

谢谢。