这是 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)
}
它显示
在这段代码中,do.call()
卷是什么?
我不知道为什么这段代码需要do.call()
。
替换do.call()
的另一个函数是什么?
答案 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
在下一版本中会获得更多选项,
必须始终相应地更新您的代码。)