将 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 我们正在转换为 sym
bol 并评估 (!!
)
使用一个可重现的小例子
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
我正在编写一个接受公式并使用该公式的不同元素来操作数据框的函数。当我尝试使用 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 我们正在转换为 sym
bol 并评估 (!!
)
使用一个可重现的小例子
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