如何为变量名写一个函数?

时间:2015-11-03 14:50:08

标签: r

我有一个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'

我在没有这个功能的情况下尝试了它并且工作正常。问题在于函数

1 个答案:

答案 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开始,这是一个错误。