【发布时间】:2020-10-31 04:24:41
【问题描述】:
我试图从一个简单的函数“adder”中获取一个参数,然后使用一个循环来查看递增该参数的效果。
我知道必须有更好的方法,例如构建一个生成更长数据框的单个函数,或者可能没有第二个函数的嵌套循环......所以我欢迎这些!
但我更特别感兴趣的是如何引用(?)然后解析(?)参数,这里称为“a”或“b”(但函数会在新函数,这里称为“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 输入x 是a * t。
棺材上的钉子似乎在使用赋值运算符的 LHS 上的 arg_to_change_enquo。我知道这里有很多关于非标准评估的文章,但我尝试过 quote、enquo、bquote、parse/eval、sym、substitute、!!、{{}}、=、:=、assign 以及所有这些的组合没有运气。我的直觉是答案在于指定哪个环境?如果有人知道“ELI5”关于环境的任何好的参考资料,我将不胜感激。谢谢!
【问题讨论】:
-
你必须使用
library(rlang),但是你会得到错误“:=只能在一个准引用的参数中使用”我认为问题是你的函数adder不能处理它的论点以正确的 tidyeval 方式进行,但我还没有找到正确的方式
标签: r arguments non-standard-evaluation