最佳答案
                                        
                                                                        
                                我尝试编写一个函数来接受一个 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()。理想情况下,该函数可以接受。substituteformula()和 match.call(),这两个我都没有多少经验。子问题  : do.call()优于 eval()吗?
 
                                
                             
                                
                             
                                
                             
                                
                             
                                
                             
                                
                             
                                
                            