使用knitr从R chunk中以编程方式在.md文档中包含图像

时间:2012-06-19 08:08:20

标签: r knitr

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

这样的东西
```{r echo=FALSE}
cat("![](myfile_1.png)")
```

将无效,因为生成的.md输出为

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

我需要摆脱代码标记```和前导##。 是否可以直接从R块中注入markdown代码?

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

3 个答案:

答案 0 :(得分:11)

使用results ='asis'意味着您不必弄乱钩子,注释等因为结果不被视为代码,而是降价(或者输出格式恰好是什么)

```{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)

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

答案 1 :(得分:1)

假设您使用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)")
```

如果您想再次渲染降价,请确保再次重置挂钩,一种方法是使用render_markdown()

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

答案 2 :(得分:1)

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

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