Rmarkdown knitr::include_graphics无法在循环(loop)中使用

这个问题困扰一天两夜,记录一下
解决办法参考s1

问题:

Shiny 接收多个文件,每个文件生成一张图片,结束。最后将地址通过 params 传给 Rmarkdown(Rmd),生成报告。这里面需要在Rmd中进行遍历,但是在for loop中遍历 使用knitr::include_graphics() 无法在Rmd展示图片。Demo Code:

Shiny

library(shiny)
shinyApp(
  ui = fluidPage(
    textInput("s1", "Description 1", "image1.png"),
    textInput("s2", "Description 2", "image2.png"),
    downloadButton("report", "Generate report")
  ),
  server = function(input, output) {
    output$report <- downloadHandler(
      filename = "report.html",
      content = function(file) {
        tempReport <- file.path(tempdir(), "report.Rmd")
        file.copy("volcano2.Rmd", tempReport, overwrite = TRUE)
        params <- list(tag = c(input$s1, input$2"))
        rmarkdown::render(tempReport, output_file = file,
                          params = params,
                          envir = new.env(parent = globalenv())
        )
      }
    )
  }
)

为了突出主要问题,这里直接把已经存在tempdir()的图片名作为 params。

volcano2.Rmd

---
title: <center>xxxx</center>
author: <center>`r knitr::opts_chunk$set(echo = FALSE, out.width="30%")``r knitr::include_graphics(paste("G:\\Project\\workspace","www\\xxx.jpg",sep="\\"))`</center>
date: <center>`r format(Sys.Date(),'%Y-%m-%d')`</center>
runtime: "static"
params:
  tag: NA
output:
  html_document:
    toc: no 
    toc_float: yes 
    keep_md: true
    theme: flatly
    number_sections: false 
---

``` {r}
knitr::opts_chunk$set(echo = FALSE, message = TRUE, warning = TRUE) ``` # Rmd的R 代码块于md语法的代码一样,为了避免歧义这样写
# xxxxx
&emsp;&emsp;1234
### {.tabset .tabset-fade .tabset-pills}

```{r, results='asis', out.width='60%', echo=FALSE}
n <- params$tag
for (i in n){
  cat("#### " ,i, "\n\n")
  a <- paste(tempdir(), i, sep = "\\")
  cat(knitr::include_graphics(a))
 # knitr::include_graphics(a)
  cat('\n\n')
} ```
### {-}

cat(knitr::include_graphics(a)) 不出图的原因参见yihui : include_graphics() has to be used in top-level R expressions. 即无法在循环内使用,因此解决办法有:

1. Rmd插入图片,但是无法改样式

```{r, results='asis', out.width='60%', echo=FALSE}
n <- params$tag
for (i in n){
  cat("#### " ,i, "\n\n")
  a <- paste(tempdir(), i, sep = "\\")
 aaa #见下面
  cat('\n\n')
} ``` 

2.HTML插入图片,可以改样式,推荐!!!

```{r, results='asis', out.width='60%', echo=FALSE}
n <- params$tag
for (i in n){
  cat("#### " ,i, "\n\n")
  a <- paste(tempdir(), i, sep = "\\")
  cat("<img src=",a," width='60%' height='60%' align = center />")
  cat('\n\n')
} ```

aaa : cat("[图片上传失败...(image-3b0c65-1598935814989)]")

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343