【问题标题】:Using ellipsis parameters alongside other parameters将省略号参数与其他参数一起使用
【发布时间】:2021-11-22 20:05:48
【问题描述】:

我想使用函数根据传递的参数修改绘图。但是,我不确定应该将修改参数列表转换成什么格式,以用作相应“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)

附:我打算稍后根据每个“geom”验证参数列表。

【问题讨论】:

    标签: r function ggplot2 ellipsis


    【解决方案1】:

    捕获椭圆中的值后,您负责传递它们。为了将这些值注入到后续调用中,您需要使用基本 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)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      相关资源
      最近更新 更多