将省略号参数与其他参数一起使用

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)
}