如何解决使用rlang将变量名从公式传递到整洁的函数中
我已经阅读了整洁的评估书、几个问题和其他一些资源,但我仍然找不到直接的答案。
假设我在 R 中有一个公式对象,比如 x ~ y + z
,还有一个函数 f
,我定义如下。
f % 选择(这里有东西) }
我希望评估 f(df,a_formula)
以给出与 df %>% select(x,y,z)
相同的结果,而无需手动指定公式组件。
我知道 rlang
有一些处理公式的函数,并且有来自基础 R 的 all.vars()
,但我不确定我需要在内部 select()
函数中放入什么在 f()
内,以评估我想要的方式。在得到我想要的东西之前只进行基本的字符串操作是最好的答案吗?我希望是否有某种方式让整洁的评估内容在幕后处理这个问题,例如,f(df,formula(x ~ .))
会像往常一样导致 f %>% select(x,everything())
的 dplyr
。
所以基本上我要问的是,有没有办法从公式中提取变量并让 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 ~ .)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。