为什么在这里使用do.call?

时间:2018-07-02 09:01:40

标签: r ggplot2

这是 ggplot2用于数据分析的优雅图形

的示例
geom_mean <- function(..., bar.params = list(), errorbar.params = list()) {
  params <- list(...)
  bar.params <- modifyList(params, bar.params)
  errorbar.params <- modifyList(params, errorbar.params)

  bar <- do.call("stat_summary", modifyList(
    list(fun.y = "mean", geom = "bar", fill = "grey70"),
    bar.params)
  )
  errorbar <- do.call("stat_summary", modifyList(
    list(fun.data = "mean_cl_normal", geom = "errorbar", width = 0.4),
    errorbar.params)
  )

  list(bar, errorbar)
}

它显示

enter image description here

在这段代码中,do.call()卷是什么?

我不知道为什么这段代码需要do.call()

替换do.call()的另一个函数是什么?

1 个答案:

答案 0 :(得分:2)

do.call使用作为列表提供的参数调用函数。
例如,

 do.call("plot", list(x = 1:10, y = 1:10))

将导致

plot(x = 1:10, y = 1:10)

这种方法允许使用任意参数编号,即 被

捕获
params <- list(...)

然后,您可以根据需要首先修改其中一些,然后使用此修改后的列表调用函数stat_summary

do.call("stat_summary", params)

原因是stat_summary本身接受任意数量的参数(请参见... 在其文档中)。如果要描述所有可能的参数名称, 用户可能会提供的代码,这将导致很多不灵活的代码 (想象一下,stat_summary在下一版本中会获得更多选项, 必须始终相应地更新您的代码。)