r - 在 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
您可以在 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 插入图像
推荐阅读
- android - Android Studio:使用 XML 中的属性在自定义 SwipeButton 中创建对象
- firebase - 如何在 Cloud Functions 上使用 admin.auth().createUser() 和哈希密码?
- r - 用“_”的字符串右侧替换列名
- css - 如何用 component.css (Angular) 覆盖 styles.css
- php - Laravel 的刀片无法输出 HTML
- java - Parse 自动注销 Android
- c - Golang cgo *C.int 大小差异
- mysql - MySQL 索引条件在哪里减慢查询速度?
- python - 在 keras 中创建混合数据生成器(图像、csv)
- apache-spark - 和DataFrame等价的sql语法是什么#coalesce