2012-03-09 135 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)