Несколько участков в цикле for с Sweave

мой кусок в Sweave:

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

в результирующем pdf я получаю только один сюжет (с первой итерации). Я хотел бы напечатать все 10 сюжетов. Что я делаю не так? Я попытался заменить dev.new() С frame() и plot.new() но ничего не произошло.

1 ответов


как @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)
@

это в настоящее время не работает, потому что 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="")
}
@