2012-03-09 98 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 

工作正常。但是,當我嘗試更換新df,我打的錯誤:

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

有什麼想法?

回答

4

當然,我發佈後立即找到答案 - 它不是ggplot2%+%運算符。另一個命名空間碰撞。 mboost包還提供了一個%+%運營商。

我「通過做detach(package:mboost)」解決了這個問題。我還可以做這樣

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

事物的解決方案,以避免命名空間衝突將是最好的解決這個問題,但我不知道該怎麼做。

+1

盡我所能想出是'GGPLOT2 :: \'%+%\'(P,DF )',但我不知道如何組合指定中綴二進制運算符和名稱空間限定。 – 2012-03-09 23:55:24

+0

啊哈 - 我試過'\'ggplot2 ::%+%\''但那不起作用。 – 2012-03-10 03:18:11

+0

可以插入二元運算符的方法嗎?這可能有助於解決命名空間碰撞,也許可能。 – 2012-03-10 03:19:28

1

您可以將中綴運算符重新分配給中綴運算符,但我認爲您不需要特別努力即可將它們重新轉換爲常規函數。試試這個:

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

....並把它作爲p %+% df,而不是%+%(a,b)