2012-03-09 19 views
5

Mi viene un intoppo quando tento di utilizzare l'operatore %+% per ripetere un grafico esistente con nuovi dati. Il mio codice è simile al seguente:ggplot2: Usa% +% per tracciare nuovi dati

df <- data.frame(ending=now()+hours(0:5), actual=runif(6), pred=runif(6)) 
p <- ggplot(df, aes(x=ending)) + 
    geom_line(aes(y=actual, color='Actual')) + 
    geom_line(aes(y=pred, color='Predicted')) + 
    ylab('Faults') + 
    scale_color_manual('Values', c("Predicted"="red", "Actual"="black")) 
p 

Questo funziona correttamente. Ma quando provo a sostituire un nuovo df, mi ha colpito errori:

p1 %+% df 
Error in bl1$get_call : $ operator is invalid for atomic vectors 

Qualche idea?

risposta

4

Ovviamente, subito dopo la pubblicazione, trovo la risposta - non è l'operatore %+%ggplot2. Un'altra collisione nello spazio dei nomi. Il pacchetto mboost fornisce anche un operatore %+%.

I "risolto" questo facendo detach(package:mboost). Potrei anche risolverlo facendo qualcosa di simile

replot <- get('%+%', 'package:ggplot2') 
replot(p, df) 

Una soluzione per evitare la collisione spazio dei nomi sarebbe meglio, ma non so come fare.

+1

migliore che posso venire in mente è 'ggplot2 :: \'% +% \ '(p, df) ', ma non so come combinare specificando un operatore binario infisso e una qualifica di namespace. –

+0

Aha - Ho provato '\ ggplot2 ::% +% \' 'ma non funzionava. –

+0

È possibile applicare gli operatori binari ai metodi? Questo potrebbe aiutare a risolvere la collisione nello spazio dei nomi, forse, forse. –

1

È possibile riassegnare gli operatori di infisso per l'inserimento degli operatori, ma non penso che sia possibile quindi riportarli in funzioni regolari senza uno sforzo particolare. Prova a modificare:

`%new+%` <- ggplot2::`%+%` 

.... e usarlo come p %+% df, piuttosto che come %+%(a,b)

Problemi correlati