我想要读取某些文件(VI3g栅格数据)。我想要读入的文件的名称保存在名为'filename'的矢量中(其中第一个元素vector是我想要读取的第一个文件的名称),并且我想将它们分配给的变量名称(其中第一个元素是第一个要读入的变量的名称)是称为'varname'。getValues在循环中
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]))' – Tensibai
或者简单地'assign(varname [i],getValues(ReadVI3g(filename [i])))' – Tensibai
更好的方法可能是使用lapply,在您的环境中使用所有这些媒介并不现实。就像'myvars < - lapply(varnames,function(x){........}' – Heroka