2013-05-29 17 views
5

Sto facendo OOP R e mi chiedevo come fare in modo che lo + possa essere usato per aggiungere oggetti personalizzati insieme. L'esempio più comune di ciò che ho trovato è in ggplot2 con l'aggiunta di geomi.Aggiunta di oggetti in R (come i livelli ggplot)

ho letto attraverso il codice sorgente ggplot2 e abbiamo trovato questo

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

Sembra "%+%" viene utilizzato, ma non è chiaro come che si traduce alla fine in + operatore di pianura.

+2

Questa è una sorta di sopra del mio livello di comprensione, ma la linea 63 in allegato sembra definire un metodo '' + per essere spedito in 'oggetti gg'. 'methods (" + ")' conferma che esiste un metodo per 'gg'. – Chase

risposta

5

È sufficiente definire un metodo per la funzione generica +. (Al link nella tua domanda, quel metodo è "+.gg", progettato per essere inviato dagli argomenti della classe "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

Grazie, questo è esattamente quello che stavo cercando. Per curiosità, sai dove si trova nei documenti R? – Greg

+1

@Greg - Non penso che * sia * direttamente nei documenti R. In realtà hai fatto la cosa migliore andando direttamente alle fonti della funzione che ti interessava. Avrebbe anche lavorato per provare 'methods (" + ")' e poi ho dato un'occhiata a '+ .Date' o' + .POSIXt' o '+ .gg' (se ** ggplot2 ** è stato caricato). In ogni caso, contento che questo abbia aiutato. –

Problemi correlati