将 R 公式与 dplyr 一起使用

Using R formula with dplyr

我正在编写一个接受公式并使用该公式的不同元素来操作数据框的函数。当我尝试使用 dplyr 时,我 运行 遇到了麻烦(我认为这是因为所谓的“非标准评估”)。

例如,我想使用公式中的元素引用数据框中的列 df。如果我将公式存储为 form 并想访问以 form 的第一个元素命名的 df 列,我可以写:

df[all.vars(form)[1]].

很遗憾,以下方法不起作用:

df %>% filter(all.vars(form)[1]) < 100).

我将如何使用 dpylr 以这种方式引用变量?我已经尝试了几种方法,例如 rlang::sym,但没有成功。

我们可以使用 across,它可以是一列或多列

library(dplyr)
df %>%
    filter(across(all.vars(form), ~ . < 100))

如果是单列

df %>% 
     filter(across(all.vars(form)[1], ~ . < 100))

或者另一种选择是 rlang::sym!!

df %>%
     filter(!! rlang::sym(all.vars(form)[1]))

all.vars 的输出是 character class 我们正在转换为 symbol 并评估 (!!)


使用一个可重现的小例子

data(mtcars)
form <- mpg ~ cyl
mtcars %>%
      filter(!! rlang::sym(all.vars(form)[1]) < 15)
#                      mpg cyl disp  hp drat    wt  qsec vs am gear carb
#Duster 360          14.3   8  360 245 3.21 3.570 15.84  0  0    3    4
#Cadillac Fleetwood  10.4   8  472 205 2.93 5.250 17.98  0  0    3    4
#Lincoln Continental 10.4   8  460 215 3.00 5.424 17.82  0  0    3    4
#Chrysler Imperial   14.7   8  440 230 3.23 5.345 17.42  0  0    3    4
#Camaro Z28          13.3   8  350 245 3.73 3.840 15.41  0  0    3    4