【发布时间】:2017-10-19 19:12:23
【问题描述】:
我正在创建一个包,它使用non-standard evaluation 来跟踪列的含义。该包在函数之间传递一个数据框,这些函数执行不同的操作并执行相同的列集。非标准评估非常适合:
my_select <- function(df, xcol, ycol) {
new_df <- dplyr::select(df, !!xcol, !!ycol)
new_df
}
my_select(mtcars, quo(wt), quo(mpg))
但是,我想要一个可以使用公式的函数:
my_lm <- function(df, xcol, ycol) {
new_lm <- lm(!!xcol, !!ycol, data=df)
new_lm
}
my_lm(mtcars, quo(wt), quo(mpg)
返回Error in !xcol : invalid argument type。 quo()、enquo()、!!的各种组合我都试过了,但基本的问题是我不知道lm需要什么样的对象。
【问题讨论】:
-
我可以通过以下方式解决这个问题:
new_lm <- lm(unlist(select(df, !!xcol)) ~ unlist(select(df, !!ycol)))但这很不优雅,问题仍然是我不明白非标准评估如何处理数据帧