在R中将对象相加(如ggplot图层)

5
我正在进行面向对象编程的R语言开发,并想知道如何使用+来将自定义对象相加。我找到了最常见的示例是在ggplot2中将图层叠加在一起。
我查阅了ggplot2的源代码,发现它使用了"%+%",但不清楚它是如何最终转换成普通的+运算符的。
参考链接:https://github.com/hadley/ggplot2/blob/master/R/plot-construction.r

2
这有点超出我的理解范围,但是附加的代码中第63行似乎定义了一个方法,用于在gg对象上分派+methods(“+”)确认确实存在一个gg的方法。 - Chase
1个回答

5
您只需要为通用函数+定义一个方法即可。(在您提问的链接中,该方法是"+.gg",旨在通过"gg"类的参数进行分派)。
## Example data of a couple different classes
dd <- mtcars[1, 1:4]
mm <- as.matrix(dd)

## Define method to be dispatched when one of its arguments has class data.frame
`+.data.frame` <- function(x,y) rbind(x,y)

## Any of the following three calls will dispatch the method
dd + dd
#            mpg cyl disp  hp
# Mazda RX4   21   6  160 110
# Mazda RX41  21   6  160 110
dd + mm
#            mpg cyl disp  hp
# Mazda RX4   21   6  160 110
# Mazda RX41  21   6  160 110
mm + dd
#            mpg cyl disp  hp
# Mazda RX4   21   6  160 110
# Mazda RX41  21   6  160 110

谢谢,这正是我在寻找的。顺便问一下,你知道这在 R 文档中的位置吗? - Greg
1
@Greg -- 我不认为这个直接在R文档中有提到。你通过直接查看你感兴趣的函数的源代码做得非常好。也可以尝试使用methods("+"),然后查看+.Date或者+.POSIXt或者+.gg(如果已经加载了ggplot2)。无论如何,很高兴这能帮到你。 - Josh O'Brien
只是作为后续,因为这超出了我的理解范围:我如何使用 +.gg* 将 ggproto 对象相加?假设我想要保存一些比例 aes 以供稍后使用,例如 my.scale_aes <- scale_x_continuous(...) + scale_color_manual(...)。既然我有了 +.gg*,我该怎么做呢? - Dr. Fabian Habersack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接