2013-05-29 25 views
5

Robię OOP R i zastanawiałem się, jak to zrobić, aby + może być używany do dodawania niestandardowych obiektów razem. Najpopularniejszym przykładem tego, co znalazłem, jest ggplot2 w/dodawanie geomów razem.Dodawanie obiektów razem w R (jak warstwy ggplot)

Czytam poprzez kod źródłowy ggplot2 i znaleźć ten

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

Wygląda "%+%" jest używany, ale nie jest jasne, w jaki sposób ostatecznie przekłada się na zwykłym + operatora.

+2

Jest to trochę powyżej mojego poziomu zrozumienia, ale linia 63 w dołączonym zdaje się definiować metodę wysyłania '+' na obiektach 'gg'. 'methods (" + ")' potwierdza, że ​​istnieje metoda 'gg'. – Chase

Odpowiedz

5

Wystarczy tylko zdefiniować metodę dla ogólnej funkcji +. (W linku w pytaniu ta metoda jest "+.gg", zaprojektowana do wysyłania przez argumenty klasy "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

Dzięki temu właśnie tego szukałem. Czy z ciekawości wiesz, gdzie to jest w dokumentach R? – Greg

+1

@Greg - Nie sądzę, że * jest * bezpośrednio w dokumentach R. Rzeczywiście zrobiliście najlepszą rzecz, przechodząc od razu do źródeł funkcji, którymi byliście zainteresowani. Próbowałoby to również wypróbować 'metody (" + ")', a następnie rzucić okiem na '+ .Date' lub' + .POSIXt' lub '+ .gg' (jeśli załadowano ** ggplot2 **). W każdym razie, cieszę się, że to pomogło. –