2014-07-11 31 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()