r-使用非标准求值来调用嵌套函数中的参数



我正试图从一个简单函数中获取一个参数"加法器";然后使用循环来查看递增该参数的效果。

我知道一定有更好的方法,比如构建一个单独的函数来生成更长的数据帧,或者可能是一个没有第二个函数的嵌套循环。。。所以我欢迎这些!

但我更感兴趣的是如何引用(?(,然后解析(?(这个论点,这里称为"要么";a";或";b";(但函数会在新函数中声明它们"arg_to_change"(,这里称为"arg_te_change";change_of_adder_arguments";。

adder <- function(a=1,b=2){
data.frame(t=1:100) %>% mutate(x=a*t, y=b*2)

}
change_of_adder_arguments <- function(arg_to_change) {
output <- list()
arg_to_change_enquo <- enquo(arg_to_change)
for (i in 1:5) {
output[[i]] <- ggplot(adder(!!arg_to_change_enquo := i), aes(x, y)) + geom_point()

}
return(output)
}
change_of_adder_arguments(a)
change_of_adder_arguments(b)

错误:mutate()输入x出现问题。x找不到函数":="i输入CCD_ 3是CCD_。

棺材上的钉子似乎在使用赋值运算符LHS上的arg_to_change_enqio。我知道这里有很多关于非标准评估的文章,但我尝试过quote、enko、bquote、parse/eval、sym、substitute、!!,{{}}、=、:=、assign和所有这些的组合都没有运气。我的直觉是,答案在于具体说明哪种环境?如果有人知道任何好的参考资料;ELI5";关于环境,我将不胜感激。谢谢!

您可以使用do.call并将要更改的参数作为列表传递。

library(ggplot2)
change_of_adder_arguments <- function(arg_to_change) {
output <- vector('list', 5)
arg_to_change_string <- deparse(substitute(arg_to_change))
for (i in 1:5) {
output[[i]] <- ggplot(do.call(adder, setNames(as.list(i), 
arg_to_change_string)), aes(x, y)) + geom_point()
}
return(output)
}
plot <- change_of_adder_arguments(b)

最新更新