我正在尝试做一些非常类似的事情here https://community.rstudio.com/t/passing-named-list-to-mutate-and-probably-other-dplyr-verbs/2553/11.
本质上,我需要将命名列表传递给函数,并将该命名列表作为其参数传递给另一个函数。
如果我们点击该链接,他们就可以使用 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 ,而是使用另一个用户定义的函数来代替它,所以如果您对如何实现这一目标有任何建议,我也将不胜感激。 (顺便说一句,我确实必须使用命名列表,我认为我不能使用......)。
非常感谢你的帮助。