带有Sweave的for循环中的多个图

pmi*_*hna 6 r sweave

我在Sweave中的大块:

<<fig=TRUE,echo=FALSE>>=
for(i in 1:10) {
  plot(rep(i,10))
  dev.new()
}
@
Run Code Online (Sandbox Code Playgroud)

在得到的pdf中,我只得到一个图(从第一次迭代开始).我想打印所有10个地块.我究竟做错了什么?我试图取代dev.new()frame()plot.new(),但什么都没有发生.

Ben*_*ker 10

正如@rawr建议最简单的解决方案是切换到knitr(完全没有理由不去!)并fig.keep="all"输入你的代码块选项(如果切换到knitr你不需要fig=TRUE更多...包括数字自动工作,fig.keep="none"是模拟的fig=FALSE)

或者,如果你想坚持使用香草Sweave,请查看Sweave手册 p.17:

A.9从一个图形块创建几个数字不起作用

考虑您想要在类似于的循环中创建多个图形

<<fig=TRUE>>
for (i in 1:4) plot(rnorm(100)+i)
@
Run Code Online (Sandbox Code Playgroud)

这当前不起作用,因为Sweave每个图块只允许一个图形.简单的原因是Sweave在执行代码之前打开postscript设备并在之后关闭它.如果你需要在一个循环中绘图,你必须按照它的顺序编程

<<results=tex,echo=FALSE>>=
for(i in 1:4){
file=paste("myfile", i, ".eps", sep="")
postscript(file=file, paper="special", width=6, height=6)
plot(rnorm(100)+i)
dev.off()
cat("\\includegraphics{", file, "}\n\n", sep="")
}
@
Run Code Online (Sandbox Code Playgroud)