【发布时间】:2016-05-22 14:55:36
【问题描述】:
我正在尝试编写一个函数,该函数将数据框和函数名称作为参数。当我尝试使用标准 R 语法编写函数时,我可以使用 @hadley 在 http://adv-r.had.co.nz/Computing-on-the-language.html 中推荐的 eval 和 substitute 获得良好的结果
> df <- data.frame(y = 1:10)
> f <- function(data, x) {
+ out <- mean(eval(expr = substitute(x), envir = data))
+ return(out)
+ }
> f(data = df, x = y)
[1] 5.5
现在,当我尝试使用 %>% 运算符编写相同的函数时,它不起作用:
> df <- data.frame(y = 1:10)
> f <- function(data, x) {
+ data %>%
+ eval(expr = substitute(x), envir = .) %>%
+ mean()
+ }
> f(data = df, x = y)
Show Traceback
Rerun with Debug
Error in eval(expr, envir, enclos) : objet 'y' introuvable
>
如何将管道运算符与 eval 和 substitute 结合使用?这对我来说似乎真的很棘手。
【问题讨论】:
-
问题不在于管道,而在于
dplyr函数使用的Non Standard Evaluation