将省略号参数与其他参数一起使用
Using ellipsis parameters alongside other parameters
我想使用函数根据传递的参数修改绘图。但是,我不确定我应该将修改参数列表转换成什么格式,以用作相应 'geom'.
中的参数
library(ggplot2)
data <- tibble(a = 1:3, b = 11:13)
p <- ggplot(data)
plot_modify <- function(p, geom = "", ...){
modifications <- list(...)
if(geom == "point"){
p <- p + geom_point(aes(x = a, y = b), modifications)
}
return(p)
}
plot_modify(p, "point", alpha=0.1, size = 0.3)
P.s。我打算稍后根据每个 'geom' 验证参数列表。
捕获椭圆中的值后,您负责传递它们。为了将这些值注入后续调用,您需要使用基本 R 方法
使用类似 do.call
的方法构建调用
plot_modify <- function(p, geom = "", ...){
modifications <- list(...)
if(geom == "point"){
p <- p + do.call("geom_point", c(list(aes(x = a, y = b)), modifications))
}
return(p)
}
但请注意,list(...)
将强制评估您的所有参数,这与函数的正常行为略有不同。
如果您想使用更多 rlang
策略,您可以这样做
plot_modify <- function(p, geom = "", ...){
modifications <- list(...)
if(geom == "point"){
p <- p + rlang::inject(geom_point(aes(x = a, y = b), !!!modifications))
}
return(p)
}
我想使用函数根据传递的参数修改绘图。但是,我不确定我应该将修改参数列表转换成什么格式,以用作相应 'geom'.
中的参数library(ggplot2)
data <- tibble(a = 1:3, b = 11:13)
p <- ggplot(data)
plot_modify <- function(p, geom = "", ...){
modifications <- list(...)
if(geom == "point"){
p <- p + geom_point(aes(x = a, y = b), modifications)
}
return(p)
}
plot_modify(p, "point", alpha=0.1, size = 0.3)
P.s。我打算稍后根据每个 'geom' 验证参数列表。
捕获椭圆中的值后,您负责传递它们。为了将这些值注入后续调用,您需要使用基本 R 方法
使用类似do.call
的方法构建调用
plot_modify <- function(p, geom = "", ...){
modifications <- list(...)
if(geom == "point"){
p <- p + do.call("geom_point", c(list(aes(x = a, y = b)), modifications))
}
return(p)
}
但请注意,list(...)
将强制评估您的所有参数,这与函数的正常行为略有不同。
如果您想使用更多 rlang
策略,您可以这样做
plot_modify <- function(p, geom = "", ...){
modifications <- list(...)
if(geom == "point"){
p <- p + rlang::inject(geom_point(aes(x = a, y = b), !!!modifications))
}
return(p)
}