Имена динамических переменных в циклах for в сочетании с gdal - PullRequest
0 голосов
/ 26 марта 2019

У меня есть следующая проблема, пытающаяся как-то решить:

Я создал 10 массивов различных интерполяций IDW с помощью пакета gstat / gdal.

Теперь у меня есть следующие переменные, которые я пытаюсь экспортировать в мой жесткий диск:

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, но ничего не делает. Спасибо за вашу помощь!

...