如何解决您可以“保存” dplyr函数供以后使用吗?
这是一个好奇心问题-我实际上不需要这样做,但是我试图理解R的准引用和整洁的评估功能,并且我认为这将对此有所帮助。
假设您要从starwars
数据集中过滤机器人:
library(dplyr)
library(rlang)
starwars %>% filter(species == "Droid")
是否可以执行类似保存filter
调用并在以后重用的操作?如果要过滤的条件很多,这对于简化将很有用。像
filter_droid = some_quote(filter(species == "Droid"))
starwars %>% some_unquote(filter_droid)
当然,您可以这样做:
cond = expr(species == "Droid")
starwars %>% filter(eval(cond))
,但是当有多个参数时,这种想法并不总是可行。例如,当使用mutate
创建两个新列时,这将不起作用:
new_cols = exprs(col1 = 1,col2 = 2)
starwars %>% mutate(eval(new_cols))
如果我正在编写脚本,则可以通过定义一个对我执行mutate
调用的函数来解决这个问题-为了好奇,我想忽略那样做。您如何“保存” mutate
/ filter
调用,或者至少保存其中的参数,以便以后在代码中交互使用?
解决方法
您可以使其功能
filt <- . %>% filter(species == "Droid")
starwars %>% filt
或者在注入单个参数时使用eval()
运算符,而不是使用!!
cond = expr(species == "Droid")
starwars %>% filter(!!cond)
或使用!!!
注入多个。
new_cols = exprs(col1 = 1,col2 = 2)
starwars %>% mutate(!!!new_cols)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。