如何定义ggplot2 plus运算符?

jak*_*kub 6 r operators ggplot2

如果提供的不是数字,+通常会抛出non-numeric argument to binary operator.但它适用于ggplot2,将情节粘贴在一起.同时,它在ggplot2的上下文之外保留其常用功能(例如,作为算术运算符或公式运算符),因此其ggplot2版本与这两者中的任何一个都不冲突.

我希望了解如何以+这种方式表现.浏览ggplot2 github repo,我找到了函数定义+.gg,%+%但它并没有让我更清楚.

我会很高兴指向ggplot2包中执行此操作的代码,或者对如何完成此操作的一般化解释.

Vin*_*mme 8

如果你剖析+.gg我们有:

> ggplot2:::`+.gg`
function (e1, e2) 
{
  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)

此外,add_theme您感兴趣的是add_ggplot可以访问的内容ggplot2:::add_ggplot.后者 - 一个长期但非常有组织的功能 - 揭示了更多"级联"功能,以分发要添加的内容.

话虽这么说,R"知道"什么时候在类的对象上使用"+" gg才能应用(因为S3类).您可以在ggplot2GitHub repos中找到起点ggproto.R,我认为大多数ggplot2行为依赖于此.

这就是你要找的东西吗?

  • 那是因为 [S3 类](http://adv-r.had.co.nz/S3.html)。任何是 R 中的函数调用(尝试 `+`(带引号)),`ggplot2`“简单地”将 `+` 方法扩展到类 `gg` 的对象。 (2认同)