2012-03-09 12 views
5

Estoy tratando de encontrar un problema cuando trato de utilizar el operador %+% para rehacer un trazado existente con nuevos datos. Mi código se ve así:ggplot2: Use% +% para trazar nuevos datos

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 

Eso funciona bien. Pero cuando intento de sustituir un nuevo df, llegué a errores:

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

Cualquier pensamiento?

Respuesta

4

Por supuesto, inmediatamente después de publicar, encuentro la respuesta - no es el operador ggplot2%+%. Otra colisión del espacio de nombres. El paquete mboost también proporciona un operador %+%.

"Lo resolví" haciendo detach(package:mboost). También pude resolverlo haciendo algo como

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

Una solución para evitar la colisión de espacio de nombres sería lo mejor, pero no sé cómo hacerlo.

+1

mejor que puedo llegar a es 'ggplot2 :: \'% +% \ '(p, df) ', pero no sé cómo combinar especificando un operador binario de infijo y una calificación de espacio de nombres. –

+0

Aha - He intentado '\' ggplot2 ::% +% \ '' pero eso no funcionaba. –

+0

¿Pueden los operadores binarios infix ser métodos? Eso podría ayudar a resolver la colisión del espacio de nombres, tal vez, posiblemente. –

1

Puede reasignar operadores de infijo a operadores de infijo, pero no creo que pueda volver a convertirlos en funciones normales sin un esfuerzo especial. Tal vez puedas probar:

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

.... y utilizarlo como p %+% df, en lugar de como %+%(a,b)

Cuestiones relacionadas