3

我对数字有奇怪的行为。在某些块中,knitr 从单个绘图函数生成两个图形,从“chunkname”生成的图形被命名为“chunkname1.pdf”和“chunkname2.pdf”。有时,第一个只是一个与第二个大小相同的空白图形,有时它是一个无法打开的文件。作为一种解决方法,我设置了该fig.keep='last'选项。但是现在我想显示来自同一个块的两个图并将fig.keep其设置为默认值,knitr 生成 3 个 PDF 图形文件,第一个是损坏的文件(一个无法打开的文件)。

我在 Win7 64 下有 knitr 版本 1.2 (2013-04-10)、R 3.0.0 64bit (r62697 2013-04-30)。以下是我正在使用的设置:

knit_hooks$set(par = function(before, options, envir) {
  if (before) par(mar = c(4, 4, .1, .1))
})

opts_knit$set(concordance=TRUE, self.contained=TRUE)

opts_chunk$set(fig.path="figSW/SW-", keep.source=FALSE, 
   verbose=TRUE,  message=FALSE)

我无法用一个简单的例子来重现它。但是,尝试创建这样一个示例时,我发现了其他奇怪的结果。在下面的示例中,只有图 1、2 和 10 正确显示,而所有其他图均未显示(未生成 PDF 文件,并且始终\includegraphics未在 .tex 文件中生成。)

\documentclass[12pt,a4paper]{article}
 \begin{document}
Plot 1
<<test-t, echo=TRUE, results="asis", fig.width=10, fig.height=5>>=
x = c(1,2,3)
y = c(1,3,2)
plot(x,y)
@
Plot 2\\
<<test-tt, echo=FALSE, results="hide", fig.width=10, fig.height=5>>=
plot(x,y)
@
\newpage
Plot 3
<<test-s, echo=TRUE, results="asis", fig.width=10, fig.height=5>>=
x = c(1,2,3)
y = c(1,3,2)
plot(x,y)
@
Plot 4\\
<<test-ss, echo=FALSE, results="hide", fig.width=10, fig.height=5>>=
plot(x,y)
@
\newpage
Plot 5
<<test-r, echo=TRUE, results="asis", fig.width=10, fig.height=5>>=
x = c(1,2,3)
y = c(1,3,2)
plot(x,y)
@
Plot 6\\
<<test-rr, echo=FALSE, results="hide", fig.width=10, fig.height=5>>=
plot(x,y)
@
\newpage
Plot 7
<<test-v, echo=TRUE, results="asis", fig.width=10, fig.height=5>>=
x = c(1,2,3)
y = c(1,3,2)
plot(x,y)
@
Plot 8\\
<<test-vv, echo=FALSE, results="hide", fig.width=10, fig.height=5>>=
plot(x,y)
@
\newpage
Plot 9
<<test-u, echo=TRUE, results="asis", fig.width=10, fig.height=5>>=
x = c(1,2,3)
y = c(1,3,2)
plot(x,y)
@
Plot 10\\
<<test-uu, echo=FALSE, results="hide", fig.width=10, fig.height=5>>=
plot(x,y)
@
\end{document}

更奇怪的是,从 R-Studio 中编译相同的文件,除了 1,2 和 10 之外,我还得到了 plot 6 的预期结果。

4

1 回答 1

4

我无法使用您的示例和knitr1.2 / R 3.0 重现该问题。我按预期看到了所有 10 个图。

对于损坏的 PDF 图形,这似乎是一个已在knitr. 你可以试试

install.packages('knitr', repos = 'http://www.rforge.net/', type = 'source')
于 2013-05-23T03:33:59.150 回答