2012-03-09 41 views
5

Tôi gặp lỗi khi tôi cố gắng sử dụng toán tử %+% để làm lại một âm mưu hiện có với dữ liệu mới. Mã của tôi trông giống như sau:ggplot2: Sử dụng% +% để vẽ sơ đồ dữ liệu mới

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 

Điều đó có hiệu quả. Nhưng khi tôi cố gắng thay thế một số mới df, tôi gặp lỗi:

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

Bạn nghĩ gì?

Trả lời

4

Tất nhiên, ngay sau khi tôi đăng, tôi tìm thấy câu trả lời - không phải là nhà điều hành ggplot2's %+%. Một xung đột không gian tên khác. Gói mboost cũng cung cấp toán tử %+%.

Tôi đã "giải quyết" điều này bằng cách thực hiện detach(package:mboost). Tôi cũng có thể giải quyết nó bằng cách thực hiện một cái gì đó như

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

Một giải pháp để tránh va chạm không gian tên sẽ là tốt nhất, nhưng tôi không biết cách thực hiện điều đó.

+1

tốt nhất tôi có thể đưa ra là 'ggplot2 :: \ '% +% \' (p, df) ', nhưng tôi không biết làm thế nào để kết hợp chỉ định một toán tử nhị phân và một trình độ không gian tên. –

+0

Aha - Tôi đã thử '\' ggplot2 ::% +% \ '' nhưng điều đó không hiệu quả. –

+0

Các toán tử nhị phân có thể là các phương thức không? Điều đó có thể giúp giải quyết sự va chạm không gian tên, có thể, có thể. –

1

Bạn có thể gán lại các toán tử infix cho các toán tử infix, nhưng tôi không nghĩ rằng bạn có thể biến chúng trở lại thành các hàm bình thường mà không cần nỗ lực đặc biệt nào. Hãy thử điều này thay vì:

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

.... và sử dụng nó như p %+% df, chứ không phải là %+%(a,b)

Các vấn đề liên quan