从代码中制作 PDF 时使用 R Markdown HTML 显示代码和图像

Display both code and image with R Markdown HTML when making PDF from within the code

我正在创建一个 R Markdown HTML 文档,我想在其中显示以下代码以及生成的绘图图像:

pdf("plot.pdf", width=6, height=4) 
plot(cars) 
dev.off()

问题出在 pdf()dev.off() 函数上。当我用 运行 上面的代码 echo=F 时,它会抑制所有代码的显示,只在外部生成 PDF 而不显示任何图像。

```{r, echo=F}
pdf("plot.pdf", width=6, height=4)
plot(cars)
dev.off()
```   

当我 运行 这段代码加上 eval=F 时,它会显示代码,但显然不会生成图像。

```{r, eval=F}
pdf("plot.pdf", width=6, height=4)
plot(cars)
dev.off()
```

到目前为止我找到的唯一解决方案是有两个单独的代码块 - 一个用于使用 eval=F 显示代码,另一个用于显示我用 echo=F 抑制代码的图像并使用代码绘制图像,生成 PDF:

```{r, eval=F}
pdf("plot.pdf", width=6, height=4)
plot(cars)
dev.off()
```

```{r, echo=F}
plot(cars)
```

它不是很可持续的方法,所以我更愿意只用一个代码块来做。我尝试了 Yihui Xie 的各种 ways for chunks output control 但没有成功。

这不够优雅,但您可以向块中添加第二个 plot(cars) 并使用 echo=-4.

抑制其输出
```{r, echo=-4, results="hide"}
pdf("plot.pdf", width=6, height=4)
plot(cars)
dev.off()
plot(cars)
```   

如果您在 rmarkdown 中重复使用 pdfdev.off 但不想执行它们,一种解决方案是将它们重新定义为不执行任何操作。

```{r,echo=FALSE}
pdf <- function(...) Sys.sleep(.1)
dev.off <- function(...) Sys.sleep(.1)

```

```{r fig.show="hold"}
pdf("plot.pdf", width=6, height=4)
plot(cars)
dev.off()
```

当然,这应该小心使用,因为它可能会弄乱文档中的其他代码。您仍然可以使用 grDevices::pdf()grDevices::dev.off()

访问正常功能