在dqr与base r函数中的整洁求值

bfrts1fy  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(78)

我试图总结数据在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

g9icjywg

g9icjywg1#

不能使用!!运算符(也称为注入操作符或bang-bang操作符或double-bang操作符)-它不是基本R语法的一部分,而是特定于某些tidyverse函数的基本R语法的扩展。它只能在数据屏蔽参数,动态点或inject内部使用。在这些上下文之外,如果你试图用它来消除引号,你会得到一个错误。如果你在R控制台中输入?rlang::topic-inject-out-of-context``,你可以阅读更多。
你可以很容易地从一个字符串变量构建一个公式,在R中使用reformulate

purrr::map(c('Sepal.Length'), function(x) {
  aggregate(reformulate('Species', x), data = iris, FUN = mean)
})
#> [[1]]
#>      Species Sepal.Length
#> 1     setosa        5.006
#> 2 versicolor        5.936
#> 3  virginica        6.588

字符串

相关问题