我很难弄清楚如何通过对ggplot的嵌套函数调用传递参数。一个例子将有助于说明:
library('tidyverse')
dset <- tibble(
xvar = 1:5,
yvar = 6:10
)
plot_inner <- function(.outcome) {
ggplot(dset, aes(x=xvar)) +
geom_line(aes_(y=substitute(.outcome)))
}
现在我可以致电plot_inner(.outcome=yvar)
,它会正确绘制yvar
与xvar
的折线图。但是,当我想在另一个函数中嵌套plot_inner()
时会出现问题:
plot_outer <- function(..outcome) {
plot_inner(.outcome=..outcome)
}
目的是让我致电plot_outer()
并将..outcome
指定为dset
列,然后将其传递到.outcome
中的plot_inner()
,然后ggplot()
由> plot_outer(..outcome=yvar)
Error in FUN(X[[i]], ...) : object '..outcome' not found
绘制。但它不起作用:
parse()
我尝试了eval()
,substitute()
,deparse()
和plot_inner_2 <- function(.outcome) {
.outcome <- enquo(.outcome)
dset %>% rename(value = UQ(.outcome)) %>%
ggplot(aes(xvar, value)) +
geom_line()
}
的各种组合,但无法弄清楚如何制作这种嵌套函数打电话。
我也尝试了另一种方法:
plot_inner_2(.outcome=yvar)
通过这种方法,我可以致电yvar
并正确生成xvar
对plot_outer_2 <- function(..outcome) {
plot_inner_2(.outcome=..outcome)
}
> plot_outer_2(..outcome=yvar)
Error: `..outcome` contains unknown variables
的折线图。但是,当我尝试将其嵌套在另一个函数中然后调用外部函数时,我再次遇到错误:
keel.sh/policy=major
任何帮助将不胜感激。我更倾向于按照我尝试过的第一种方法来解决问题,但如果任何人都有第二种方法的解决方案,或完全采用其他方法,我会很乐意学习任何有用的方法。
答案 0 :(得分:0)
根据@ aosmith评论中的链接,在plot_inner()
函数中将eval(substitute())
包裹在plot_outer()
内似乎是一种解决方案。
plot_outer <- function(..outcome) {
eval(substitute(plot_inner(.outcome=..outcome)))
}
现在,对plot_outer(..outcome=yvar)
的调用按预期工作,将yvar
传递到.outcome
中的inner_plot()
,然后传递到ggplot()
并针对{{ 1}}。