【发布时间】:2017-06-28 17:53:48
【问题描述】:
我正在尝试在 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"
我想,这么多是有效的。
有什么建议吗?
【问题讨论】:
-
忘记
assign和get;创建一个列表对象并将 cir、NDVI 和 RGB 对象放入该列表中。该列表可以命名,以便您可以通过编程方式引用每个列表。比随意地将它们倾倒在您的工作区中要好得多。 -
@joran,这听起来不错……你能举个例子吗?如何根据文件夹的内容创建对象列表? -thx
标签: r automation r-raster