2013-05-29 3 views
5

Я делаю OOP R и задавался вопросом, как сделать так, чтобы + мог использоваться для добавления пользовательских объектов вместе. Самый распространенный пример этого я нашел в ggplot2 с добавлением геометрий вместе.Добавление объектов в 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 **). В любом случае, рад, что это помогло. –

Смежные вопросы