我想写一个函数,在里面使用dplyr,我提供变量名作为字符串。不幸的是,dplyr-s使用NSE使其变得相当复杂。从Programming with dplyr中,我得到以下示例
my_summarise <- function(df, var) {
var <- enquo(var)
df %>%
group_by(!!var) %>%
summarise(a = mean(a))
}
my_summarise(df, g1)
然而,我想写一个函数,而不是g1
,我可以提供"g1"
,我无法理解如何做到这一点。
3条答案
按热度按时间n8ghc7c11#
dplyr >= 1.0
使用双括号和cross函数的组合:
dplyr < 1.0
据我所知,你可以使用
as.name
或sym
(来自rlang
包-我不知道dplyr
最终是否会导入它):或
yi0zb3m42#
使用rlang中的
.data
代词是另一个直接处理存储为字符串的列名的选项。带有
.data
的函数如下所示f0ofjuux3#
这是如何使用
dplyr
和来自base R的非常有用的as.name
函数来实现的:基本上,我们使用
as.name()
生成一个匹配var
的name对象(这里var
是一个字符串)。然后,在Programming with dplyr之后,我们使用enquo()
来查看该名称并将关联值作为quosure返回。然后可以使用!!
在group_by()
调用中取消对该引号的引用。