ggplot2与其他功能(R)之间的加号

mim*_*mic 11 r operators ggplot2

我试图得到这个例子:

ggplot(mpg,aes(displ,hwy))+ geom_point()

有人能解释一下这两个函数之间发生了什么吗?

ggplot2是否超载"加"运算符?总结这些2的结果是什么,它分配给了什么?它是特定于R的功能,还是特定于ggplot2的?这是管道吗?

Jon*_*oll 5

@Richard Scriven 在注释中引用的函数定义在 中定义plot-construction.r,这可能会更清楚。您需要查看源代码以确切了解这两个(未导出的)函数的作用(调用的 LHS 是 atheme还是ggplot对象),但名称应该给您一个很好的主意。返回值e1通过 "adding" 修改e2

"+.gg" <- function(e1, e2) {
  # Get the name of what was passed in as e2, and pass along so that it
  # can be displayed in error messages
  e2name <- deparse(substitute(e2))

  if      (is.theme(e1))  add_theme(e1, e2, e2name)
  else if (is.ggplot(e1)) add_ggplot(e1, e2, e2name)
}
Run Code Online (Sandbox Code Playgroud)

所以,是的,+对于继承类的对象gg(所有ggplot2对象)来说是重载的。

我认为“管道”(@alistaire 的评论)是一个误导性的比喻;这非常符合标准 Ops 组通用的风格。