是否可以在传递给函数的函数中使用列名而不是数字?

时间:2013-08-19 14:45:08

标签: r apply

我想将函数应用于data.frame/data.table

的每一行
cases <- expand.grid(a=c(TRUE,FALSE), b=c(TRUE,FALSE), c=c(TRUE,FALSE))

myFun <- function(data, row){
  otherFun(data, row[1], row[2], row[3])
}

apply(cases, 1, myFun, data=dt1)

然而,这是有效的

myFun <- function(data, row){
  otherFun(data, row$a, row$b, row$c)
}

这不起作用。

最好的方法是什么,以便它不必依赖列顺序?

1 个答案:

答案 0 :(得分:2)

apply向矩阵强制执行。查看?apply中的详细信息:

  

如果X不是数组而是具有非空昏暗值的类的对象(例如数据框),则应用尝试通过as.matrix将其强制转换为数组(如果它是二维的)(例如,数据框)或通过as.array。

所以$ indexing是不合适的。