2014-07-11 56 views
0

我有一個R腳本,它構建一個數據框DF,然後使用source調用目錄Rscripts中的每個腳本來生成圖。因此,一個典型的執行看起來像使用源來創建線框圖R

pdf('output.pdf') 
source('Rscripts/make_plot.r') 
dev.off() 

其中Rscripts/make_plot.r可能包含類似

plot(DF$x, DF$y) 

到目前爲止,這一戰略精美的工作(雖然我不知道這是否是推薦的方式做事情)。但是,我現在正在撞牆。我的一個Rscripts使用wireframe而不是plot,因此出於某種原因,在該文件上調用source不會產生情節。一個小例子再現問題可以通過將以下的make_plot.r發現:

library("lattice") 
N <- 10 
s <- seq(0, 1, 0.1) 
wireframe(z~x*y, data=data.frame(x=rep(s, each=N), y=rep(s, N), z=rep(s, N))) 

自身調用,但不會產生當通過source稱爲情節時的作品。

我該如何解決這個問題?

回答

2

這在R FAQ

爲什麼格/網格圖形不行覆蓋?

最可能的原因是你忘了告訴R顯示圖。像xyplot()這樣的格子函數會創建一個圖形對象,但不會顯示它(ggplot2圖形和S-PLUS中的格子圖形也是如此)。圖形對象的print()方法產生實際的顯示。當您在命令行中交互使用這些函數時,結果會自動打印,但是在source()或您自己的函數中,您將需要一個顯式的print()語句。

由於wireframe()是格子功能,則需要將其包裝在一個print()