使用 rlang 将公式中的变量名称传递给 tidy 函数
Passing variable names from formula into tidy function with rlang
我已经通读了整洁的评估书、几个问题和一些其他资源,但我仍然找不到直接的答案。
假设我在 R 中有一个公式对象,比如说 x ~ y + z
,还有一个函数 f
,我定义如下。
f <-函数(.data,a_formula){
.数据%>%
select(这里有些东西)
}
我想评估 f(df, a_formula)
以给出与 df %>% select(x, y, z)
相同的结果,而无需手动指定公式组件。
我知道 rlang
有几个处理公式的函数,还有来自 base R 的 all.vars()
,但我不确定我需要在内部 select()
f()
中的函数来评估我想要的方式。最好的答案是只做基本的字符串操作直到我得到我想要的吗?如果整洁的评估有某种方法可以在幕后处理这个问题,我更愿意,因此,例如,f(df, formula(x ~ .))
会像往常一样 dplyr
.[=22 导致 f %>% select(x, everything())
=]
所以基本上我要问的是,有没有办法让我从公式中提取变量并让 select()
正常评估它们?
你基本上已经找到了你需要的所有部分,你只需要将它们与 all_of()
辅助函数放在一起。例如
library(dplyr)
f <- function(.data, a_formula) {
.data %>% select(all_of(all.vars(a_formula)))
}
# test with built-in iris data frame
f(iris, Sepal.Length ~ Sepal.Width)
如果您想为 .
做一些特别的事情,那么只需将其添加到
f <- function(.data, a_formula) {
if ("." %in% all.vars(a_formula)) return(.data)
.data %>% select(all_of(all.vars(a_formula)))
}
f(iris, Sepal.Length ~ .)
我已经通读了整洁的评估书、几个问题和一些其他资源,但我仍然找不到直接的答案。
假设我在 R 中有一个公式对象,比如说 x ~ y + z
,还有一个函数 f
,我定义如下。
f <-函数(.data,a_formula){ .数据%>% select(这里有些东西) }
我想评估 f(df, a_formula)
以给出与 df %>% select(x, y, z)
相同的结果,而无需手动指定公式组件。
我知道 rlang
有几个处理公式的函数,还有来自 base R 的 all.vars()
,但我不确定我需要在内部 select()
f()
中的函数来评估我想要的方式。最好的答案是只做基本的字符串操作直到我得到我想要的吗?如果整洁的评估有某种方法可以在幕后处理这个问题,我更愿意,因此,例如,f(df, formula(x ~ .))
会像往常一样 dplyr
.[=22 导致 f %>% select(x, everything())
=]
所以基本上我要问的是,有没有办法让我从公式中提取变量并让 select()
正常评估它们?
你基本上已经找到了你需要的所有部分,你只需要将它们与 all_of()
辅助函数放在一起。例如
library(dplyr)
f <- function(.data, a_formula) {
.data %>% select(all_of(all.vars(a_formula)))
}
# test with built-in iris data frame
f(iris, Sepal.Length ~ Sepal.Width)
如果您想为 .
做一些特别的事情,那么只需将其添加到
f <- function(.data, a_formula) {
if ("." %in% all.vars(a_formula)) return(.data)
.data %>% select(all_of(all.vars(a_formula)))
}
f(iris, Sepal.Length ~ .)