最佳答案
我尝试编写一个函数来接受一个 data.frame (x
)和一个来自它的 column
。该函数对 x 执行一些计算,然后返回另一个 data.frame。我被最佳实践方法困住了,无法将列名传递给函数。
下面的两个最小示例 fun1
和 fun2
产生了预期的结果,能够以 max()
为例在 x$column
上执行操作。然而,两者都依赖于表面上(至少对我来说)的不雅
substitute()
可能还有 eval()
fun1 <- function(x, column){
do.call("max", list(substitute(x[a], list(a = column))))
}
fun2 <- function(x, column){
max(eval((substitute(x[a], list(a = column)))))
}
df <- data.frame(B = rnorm(10))
fun1(df, "B")
fun2(df, "B")
例如,我希望能够调用 fun(df, B)
函数。我考虑过但没有尝试过的其他选择:
column
作为列号的整数传递。我认为这将避免 substitute()
。理想情况下,该函数可以接受。substitute
formula()
和 match.call()
,这两个我都没有多少经验。子问题 : do.call()
优于 eval()
吗?