我有一个st
str(st)
List of 34
$ cell_ele : num [1:2000, 1:1000] 999 999 ...
现在我想写一个函数
myfun <- function(var){
rt= st$var
rt=raster(rt)
out <- writeRaster(rt, filename = "C:\\var_data")
}
var
将被使用两次,以便读取然后成为输出文件名的一部分
myfun (cell_ele)
Error in raster(matrix(data = rt)) :
error in evaluating the argument 'x' in selecting a method for function
'data' must be of a vector type, was 'NULL'
我在没有这个功能的情况下尝试了它并且工作正常。问题在于函数
答案 0 :(得分:1)
看一下函数体内写的这个命令:
rt= st$var
这将查找变量st
的名为 var 的列。它不会将var
替换为作为参数给出的变量的内容。
相反,你应该写:
rt = st[var]
所以请改变你的功能:
myfun <- function(var){
rt= st[var]
rt=raster(rt)
out <- writeRaster(rt, filename = paste("C:\\", var, "_data", sep=""))
}
将执行替换并查找其名称由您传递给函数的参数定义的列。我们也使用函数paste
,因为我们想要一个变量名:
paste将其参数(通过as.character)转换为字符串,并将它们连接起来(用sep给出的字符串将它们分开)。如果参数是向量,则它们是连接的术语 - 给出一个字符向量结果。
此外,您应该传递一个字符串参数:
myfun ("cell_ele")
[[表单只允许使用整数或字符索引选择单个元素,而[允许通过向量进行索引。请注意,对于列表或其他递归对象,索引可以是向量和向量的每个元素依次应用于列表,所选组件,该组件的选定组件等。结果仍然只是一个元素。
使用$的表单适用于列表和pairlists等递归对象。它只允许文字字符串或符号作为索引。也就是说,索引不可计算:对于需要计算表达式以查找索引的情况,请使用x [[expr]]。当$应用于非递归对象时,结果总是为NULL:从R 2.6.0开始,这是一个错误。