wib*_*ley 2 r dplyr standard-evaluation
如何将字符向量传递给dplyr::count().
library(magrittr)
variables <- c("cyl", "vs")
mtcars %>%
dplyr::count_(variables)
Run Code Online (Sandbox Code Playgroud)
这很好用,但是dplyr v0.8会抛出警告:
count_() 已弃用。请使用 count() 代替
“编程”小插图或 tidyeval 书可以帮助您使用 count() 进行编程: https: //tidyeval.tidyverse.org
我没有dplyr::count()在https://tidyeval.tidyverse.org/dplyr.html或tidyeval书当前版本的其他章节和用 dplyr 编程中看到引用名称的标准评估示例。
阅读本文档和另一个问题后,我的两个最佳猜测是
mtcars %>%
dplyr::count(!!variables)
mtcars %>%
dplyr::count(!!rlang::sym(variables))
Run Code Online (Sandbox Code Playgroud)
抛出这两个错误:
错误:列的
<chr>长度必须为 32(行数)或 1,而不是 2错误:只有字符串可以转换为符号
要从字符串创建符号列表,您需要rlang::syms(而不是rlang::sym)。要取消引用列表或向量,您需要使用!!!(not !!)。以下将起作用:
library(magrittr)
variables <- c("cyl", "vs")
vars_sym <- rlang::syms(variables)
vars_sym
#> [[1]]
#> cyl
#>
#> [[2]]
#> vs
mtcars %>%
dplyr::count(!!! vars_sym)
#> # A tibble: 5 x 3
#> cyl vs n
#> <dbl> <dbl> <int>
#> 1 4 0 1
#> 2 4 1 10
#> 3 6 0 3
#> 4 6 1 4
#> 5 8 0 14
Run Code Online (Sandbox Code Playgroud)