2013-05-29 50 views
5

我正在做OOP R並想知道如何製作它,因此可以使用+將自定義對象添加到一起。我發現的最常見的例子是在ggplot2 w /添加geoms在一起。在R中添加對象(如ggplot圖層)

我通過ggplot2源代碼閱讀,發現這

https://github.com/hadley/ggplot2/blob/master/R/plot-construction.r

看起來正在使用"%+%"的,但目前還不清楚如何最終轉化爲普通+操作。

+2

這是高於我的理解水平,但在附件中的第63行似乎定義了一個方法'+'被分派到'gg'對象。 'methods(「+」)'確認有一個'gg'的方法。 – Chase

回答

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 
+0

謝謝,這正是我正在尋找。出於好奇,你知道R文檔中的這個位置嗎? – Greg

+1

@Greg - 我認爲它*不直接在R文檔中。你實際上是通過直接找到你感興趣的函數的源頭來做最好的事情。它也會嘗試'方法(「+」)'然後查看'+ .Date'或' + .POSIXt'或'+ .gg'(如果加載了** ggplot2 **)。無論如何,很高興這有幫助。 –