2012-03-09 6 views
5

%+% 연산자를 사용하여 기존의 플롯을 새 데이터로 다시 만들려고 할 때 걸리는 일이 있습니다. 내 코드는 다음과 같습니다.ggplot2 : % + %를 사용하여 새 데이터 플롯

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 

잘 작동합니다.

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

어떤 생각 : 나는 새로운 df를 대체 할 때, 나는 오류를 공격?

답변

4

물론 내가 게시 한 후 답변을 찾았습니다. ggplot2%+% 연산자가 아닙니다. 다른 네임 스페이스 충돌입니다. mboost 패키지는 %+% 연산자도 제공합니다.

detach(package:mboost)을 수행하여이를 "해결"했습니다. 또한

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

처럼 최선을 다 할 것 네임 스페이스 충돌을 피하고에 대한 해결책을 뭔가를 수행하여이를 해결할 수있는,하지만 난 그렇게하는 방법을 모르겠어요.

+1

%+%(a,b) 베스트 내가 가지고 올 수, ....

'%new+%' <- ggplot2::'%+%' 

을하고 p %+% df로 사용하는 것은'ggplot2 : \'% + % \'(P, DF이다)',하지만 중위 연산자와 네임 스페이스를 지정하는 방법을 결합하는 법을 모르겠습니다. –

+0

아하 -'\'ggplot2 :: % + % \''을 시도했지만 작동하지 않았습니다. –

+0

바이너리 연산자를 메소드로 변환 할 수 있습니까? 아마도 네임 스페이스 충돌을 해결하는 데 도움이 될 수 있습니다. –

1

중위 연산자를 삽입 연산자에 재 할당 할 수는 있지만 특별한 노력없이 정규 함수로 되돌릴 수는 없다고 생각합니다. 대신을 시도하기보다는

관련 문제