【发布时间】:2020-05-17 15:48:29
【问题描述】:
我正在尝试做一些与here 非常相似的事情。
本质上,我需要将一个命名列表传递给一个函数,然后将该命名列表作为另一个函数的参数提供给另一个函数。
如果我们点击那个链接,他们就可以通过 mutate 来做到这一点,我可以复制它:
df <- tribble(
~a,
1
)
foo <- function(x, args) {
mutate(x, !!! args)
}
foo(df, quos(b = 2, c = 3)
# A tibble: 1 x 3
a b c
<dbl> <dbl> <dbl>
1 1 2 3
但是,如果我尝试使用任何其他功能来执行此操作,它就会失败。比如说,如果我尝试使用 print,(第一个参数是 x,所以我传递了一个带有 x 的命名列表):
print(x= "hello")
[1] "hello"
foo <- function(x, args) {
print(!!! args)
}
foo(df, quos(x = "hello"))
Error in !args : invalid argument type
我不确定为什么这在“tidyverse”功能之外不起作用。我尝试了 sym、enquo、bang bang、curly curly 等的不同组合,但无济于事。
当然,我的最终目标不是使用 print,而是使用另一个用户定义的函数来代替它,所以如果您对如何实现这一点有任何建议,我也将不胜感激。 (顺便说一句,我确实必须使用命名列表,我认为我不能使用......)。
非常感谢您的帮助。
【问题讨论】:
-
tidyverse 在 tidyverse 函数中运行
标签: r tidyverse rlang tidy tidyeval