【问题标题】:include images programmatically in .md document from within R chunk using knitr使用 knitr 在 R 块中以编程方式将图像包含在 .md 文档中
【发布时间】:2012-06-19 08:08:19
【问题描述】:

我想以编程方式在我的 .Rmd 降价文档中包含大量图像。像

```{r echo=FALSE}
cat("![](myfile_1.png)")
```

将不起作用,因为生成的 .md 输出是

```
## ![](myfile_1.png)
```

我需要去掉代码标签``` 和前导##。 是否可以选择从 R 块中直接注入 markdown 代码?

BTY:同样的问题也适用于 HTML。在这里,从 R 块中注入 HTML 代码也会非常有帮助。

【问题讨论】:

  • @mnel 的回答是正确的,但我想知道为什么你必须这样做;通常我不喜欢cat()s。如果您的图像来自外部,我可以理解,否则您应该让knitr将R代码生成的图像写入markdown输出

标签: r knitr


【解决方案1】:

使用results ='asis' 意味着您不必弄乱钩子、cmets 等,因为结果不被视为代码,而是降价(或任何输出格式)

```{r myfile-1-plot, echo = F, results = 'asis'}
cat('\n![This is myfile_1.png](myfile1.png)\n')
```

会导致

![This is myfile_1.png](myfile1.png)

请注意,我用新的行标记包裹了输出文本,以确保它位于单独的行上。

【讨论】:

【解决方案2】:

假设您使用knitr,您可以使用comment 选项:

```{r echo=FALSE, comment=""}
cat("![](myfile_1.png)")
```

编辑

你将不得不改变钩子:

```{r echo=FALSE, comment=""}
knit_hooks$set(output = function(x,
        options) x)
cat("![](myfile_1.png)")
```

当你想再次渲染 Markdown 时,请确保再次重置你的钩子,一种方法是使用 render_markdown()

```{r b, echo=FALSE, comment=""}
render_markdown()
a <- 1
```

【讨论】:

  • 谢谢。这解决了## 的部分。虽然我们仍然没有摆脱 .md 代码标记 ``` ,但该图像不会被包含在内......
  • 你需要改变钩子,我相应地改变了我的答案。
【解决方案3】:

循环使用,如果需要从数据框中粘贴一堆图片:

for(h in 1:nrow(file_names)){
   image_file<-paste('\n![](', file_names[h],')\n',sep="") 
   cat('\n')
   cat(image_file)
   cat('\n')
}

【讨论】:

  • 谢谢,我想解决这个问题,你让它工作了
猜你喜欢
  • 1970-01-01
  • 2021-03-12
  • 2013-03-07
  • 1970-01-01
  • 2012-08-19
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
相关资源
最近更新 更多