不使用向量的r-sym有一个以上的元素


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.

如果variablesAB,但不是两者都是,则它会起作用。

为此需要syms。根据?sym

sym((从字符串创建符号,syms((从字符向量中创建符号列表。

dplyr::count(df, !!!rlang::syms(variables))
A B n
1 1 2 2
2 1 3 1

有几种方法可以做到这一点。OPs方法的问题是sym()将返回单个符号,但我们需要一个符号列表。使用akrun的优秀答案,使用矢量化的symspurrr::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

相关内容

最新更新