从代码中制作 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 中重复使用 pdf
和 dev.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()
访问正常功能
我正在创建一个 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 中重复使用 pdf
和 dev.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()