df <- data.frame(A = c(1,1,1), B = c(2,2,3))
variables <- c("A", "B")
dplyr::count(df, !!!rlang::sym(variables))
Error: Only strings can be converted to symbols
Run `rlang::last_error()` to see where the error occurred.
如果variables
是A
或B
,但不是两者都是,则它会起作用。
为此需要syms
。根据?sym
sym((从字符串创建符号,syms((从字符向量中创建符号列表。
dplyr::count(df, !!!rlang::syms(variables))
A B n
1 1 2 2
2 1 3 1
有几种方法可以做到这一点。OPs方法的问题是sym()
将返回单个符号,但我们需要一个符号列表。使用akrun的优秀答案,使用矢量化的syms
或purrr::map(sym)
。
或者,没有rlang、双刘海/三刘海等,我们可以用across(all_of())
在dplyr内完成
Library(tidyverse)
count(df, !!!syms(variables)) #As suggested by @akrun
count(df, across(all_of(variables)))
count(df, !!!map(variables, sym))
A B n
1 1 2 2
2 1 3 1