在使用dplyr
管道时,我想通过从向量传递函数名称来传递函数mutate
使用NSE
。
给定两个函数名称的向量:
funs <- c("sum", "mean")
我想使用第一个值来获取总和:
require(dplyr)
mtcars %>%
group_by(cyl) %>%
mutate_(res = funs[1](hp))
这会导致错误:
Error in as.lazy_dots(list(...)) : attempt to apply non-function
do.call
do.call
基于基础的解决方案似乎会产生一些求和结果:
mtcars %>%
group_by(cyl) %>%
mutate_(res = do.call(funs[1], .))
但是尝试使用时失败mean
:
>> mtcars %>%
+ group_by(cyl) %>%
+ mutate_(res = do.call(funs[2], .))
Error in mean.default(mpg = c(21, 21, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, :
argument "x" is missing, with no default
我猜想它在这里的应用方式根本没有任何意义。因此,我的问题:如何使用NSE在dplyr
这样的功能可以从一个向量的字符串传递?
我们可以使用get
并get
提取单个字符串的值。在这里,它是一个函数,因此它返回函数本身。
mtcars %>%
group_by(cyl) %>%
mutate(res= get(funs[1])(hp))
用于传递其他参数
mtcars$hp[1] <- NA
mtcars %>%
group_by(cyl) %>%
mutate(res= get(funs[1])(hp, na.rm = TRUE))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句