for循环中与gdal相结合的动态变量名称

时间:2019-03-26 12:11:42

标签: r loops automation gdal gstat

我尝试解决以下问题:

我使用gstat / gdal包创建了10个不同IDW插值的数组。

现在我有以下变量,我正在尝试将其导出到硬盘驱动器:

DI.IDW.SAND.P.0.1, DI.IDW.SAND.P.0.2, [...]

共有10种不同的数组,用于插值过程中使用的不同功效(ipd值)。

手动导出到硬盘驱动器就可以了:

writeGDAL(DI.IDW.Sand.P.0.1, fname = vec.rast[1], drivername = "GTiff", mvFlag = -1)

但是现在我无法找到正确的解决方案:

我创建了一个data.frame,其中包含for循环的相关信息:

runner.sand = data.frame("IDP" = c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1), "str"=c("DI.IDW.Sand.P.0.1", "DI.IDW.Sand.P.0.2", "DI.IDW.Sand.P.0.3", "DI.IDW.Sand.P.0.4", "DI.IDW.Sand.P.0.5", "DI.IDW.Sand.P.0.6", "DI.IDW.Sand.P.0.7", "DI.IDW.Sand.P.0.8", "DI.IDW.Sand.P.0.9", "DI.IDW.Sand.P.1"))

然后我尝试了:

for (i in c(1:length(runner.sand[,1]))) {
writeGDAL(paste("DI.IDW.Sand.P", runner.sand[i,1], sep = "."), runner.sand[i,2], drivername = "GTiff")
}

但是我总是会收到此错误:

Error in nchar(fname) : 'nchar()' requires a character vector

当尝试自动执行proj4string时,也会出现此错误:

for (i in c(1:length(runner.sand[,2]))) {
  proj4string(runner.sand[i,2]) = CRS(paste("+init=epsg:",epsg,sep=""))
  #dat.ov = over(IDP.opt, runner.sand[i,2]) # for later idp optimazation with residual values
  #IDP.opt = cbind(IDP.opt@data, dat.ov)
}

Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function 'proj4string' for signature '"character"'

同样,如果我手动输入“普通”变量名,它会完美地工作:

proj4string(DI.IDW.Sand.P.0.1) = CRS(paste("+init=epsg:",epsg,sep=""))

我还尝试了assign所示的解决方案,但是没有任何作用。 感谢您的帮助!

0 个答案:

没有答案