У меня есть определенные файлы (растровые данные VI3g), которые я хочу прочитать. Имена файлов, которые я хочу прочитать, сохраняются в векторе с именем «имя файла» (где первый элемент вектора — это имя файла). первый файл, который я хочу прочитать), и имена переменных (где первый элемент вектора — это имя первой переменной, которую я хочу прочитать), которым я хочу их присвоить, называется «имя_переменной».
filename varname
file1.VI3g variable_xy
file2.VI3G variable_z
... ...
Мой подход (который работает) к этому был следующим:
for (i in 1:12) {
assign(varname[i], ReadVI3g(filename[i]))
}
Но данные Rasterlayer. Что мне понадобится для дальнейших вычислений, так это векторы, так как некоторые вычисления не работают с Rasterlayers. Поэтому мой подход состоял в том, чтобы преобразовать данные через getValues, чтобы получить векторы вместо Rasterlayer.
for (i in 1:12) {
assign(varname[i], ReadVI3g(filename[i]))
varname[i]<- getValues(varname[i])
}
Однако это не работает. Я получаю сообщение:
Error in (function (classes, fdef, mtable) : unable to find an
inherited method for function ‘getValues’ for signature ‘"character",
"missing", "missing"’
Я понимаю проблему, но не могу найти решение. Я также пытался обойти проблему с назначением, но это тоже не сработало.
И дополнительный вопрос: поскольку я новичок в R, у меня есть тенденция решать довольно много задач с помощью циклов. Я знаю, что это неэффективно и что часто есть более умные решения. Есть ли простой способ избежать петли здесь?
Заранее большое спасибо.
getValues(get(varname[i]))
- person Tensibai   schedule 04.09.2015assign(varname[i], getValues(ReadVI3g(filename[i])))
- person Tensibai   schedule 04.09.2015myvars <- lapply(varnames,function(x){........}
- person Heroka   schedule 04.09.2015assign
, вы ошибаетесь. Но поскольку вы не объясняете, чего хотите достичь, не приводите воспроизводимый пример и используете неизвестную функциюReadVI3g
, дать хороший совет невозможно. Вероятно, вам следует создать список объектов RasterLayer (s = lapply(filename, raster)
) или RasterStacks = stack(filename)
. Вы также говорите, что «некоторые вычисления не работают с RasterLayers» — возможно, но вы можете ошибаться. Расскажите нам, что вы хотите сделать, чтобы мы могли направить вас в правильном направлении. - person Robert Hijmans   schedule 05.09.2015