我正在try 创建一个plot函数,如果.f2 = NULL,它可以为具有因子的列绘制不同 colored颜色 ,如果.f2参数不为NULL,则绘制.f1和.f2列的交互. 当.f2不为NULL时,if语句已经不起作用.之后,我try 创建交互调用,但这不起作用.
我知道我也可以创建一个if语句来创建两个独立的aes函数,但我想知道我是否可以像下面这样做.
input = tibble(x=1:100,y=rnorm(100),f1=factor(rep(c("c",'d'),each=50)),f2=factor(rep(c("a",'b'),50)))
plot_interaction = function(.df, .x, .y, .f1, .f2=NULL) {
if (!is.null(.f2)) {
.en1 = .f1 |> enexpr() |> as.character()
.en2 = .f2 |> enexpr() |> as.character()
.expr=paste0('interaction(',.en1,',',.en2,')')
.expr = expr(.expr)
} else
.expr = ensym(.f1)
ggplot(.df, aes(x = {{ .x }}, y = {{ .y }}, colour = {{ .expr}})) +
geom_point(size = 4, alpha = 0.5)
}
plot_interaction(input, x, y, f1)
plot_interaction(input,x, y, f1, f2)