首页 > 解决方案 > 在 R Markdown 块(HTML)中使用循环连续显示 PNG 图像

问题描述

可以使用 R Markdown 块循环在 HTML 输出中连续显示多个图形文件(例如 PNG)(一个在另一个之上)吗?此循环将识别向量中的文件,例如 via list.files()

我已经尝试过使用writeLines("\n"), cat('\r\n\r\n'), knit_expand()[per this SO无济于事]。

此 R Markdown 代码(格式如下,但链接为 .Rmd)是一个可重现的示例,尝试使用writeLines("\n")and cat('\r\n\r\n')。请注意,这会将 5 R logo PNG(仅 12kb)文件副本复制到您的工作目录中。

---
title: "Stack Overflow Consecutive PNG"
author: "Rick Pack"
date: "11/20/2019"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## Copy a PNG file as multiple files

```{r png_copy, echo=FALSE}
for (q in 1:5) {
 file.copy(list.files(system.file("img", package = "png"), 
                      full.names = TRUE),
           getwd())
 file.rename("Rlogo.png", paste0("Rlogo_",q,".png"))
}
```

# Only one R logo shown instead of the five available
```{r png_show, echo=FALSE}
library(png)
# Providing the folder so you can delete the png files
# created above
print(getwd())
 all_img <- list.files(full.names = TRUE)[grepl(
     "Rlogo", list.files())]
 for (j in 1:length(all_img)) {  
 grid::grid.raster(readPNG(all_img[j]))
writeLines("\n")
cat('\r\n\r\n')  
cat("\n\n\\pagebreak\n")
 }
```

只显示一个 PNG 文件

标签: rr-markdown

解决方案


png您可以在 for 循环而不是包中使用 R Markdown 语法。鉴于您将图像与 Rmd 放在同一目录中,以下应该可以工作:

```{r, results = "asis"}
filelist <- c("Rlogo_1", "Rlogo_2", "Rlogo_3")

for(i in filelist) {
    cat(paste0("![](", i, ".png)"), "\n")
    cat("\n\n\\pagebreak\n")
}
```

输出: 在此处输入图像描述 有关更多信息,请参阅此相关问题:在 for 循环中使用 knitr::include_graphics 插入图像


推荐阅读