我试图总结数据在djr与基地r函数,但没有得到预期的结果,请让我知道为什么
例如,我尝试在下面的dmgr示例中将字符串作为列名,它可以工作。
map(c('Sepal.Length'), function(x) {
browser()
x <- sym(x)
iris %>% group_by(Species) %>% summarise(mean=mean( !!x ))
})
[[1]]
# A tibble: 3 × 2
Species mean
<fct> <dbl>
1 setosa 5.01
2 versicolor 5.94
3 virginica 6.59
字符串
然而,如果我尝试使用类似aggregate的基本r函数,它会失败。
map(c('Sepal.Length'), function(x) {
# browser()
x <- sym(x)
aggregate(!!x ~ Species, data=iris, FUN= mean)
})
Error in `map()`:
ℹ In index: 1.
Caused by error in `!x`:
! invalid argument type
型
1条答案
按热度按时间g9icjywg1#
不能使用
!!
运算符(也称为注入操作符或bang-bang操作符或double-bang操作符)-它不是基本R语法的一部分,而是特定于某些tidyverse函数的基本R语法的扩展。它只能在数据屏蔽参数,动态点或inject
内部使用。在这些上下文之外,如果你试图用它来消除引号,你会得到一个错误。如果你在R控制台中输入?rlang::
topic-inject-out-of-context``,你可以阅读更多。你可以很容易地从一个字符串变量构建一个公式,在R中使用
reformulate
:字符串