如何通过for循环在Rmarkdown中显示绘图图像?

时间:2018-06-12 18:57:06

标签: r svg r-markdown

我正在处理要打印到html文档的svg列表。我正在使用magick包认为我愿意使用其他包/解决方案。下面的代码是我尝试渲染我的html文档。但是,它不是将svg呈现给html文件,而是将metadeta打印到文档中。有没有办法克服这种行为?

---
title: "My Test Report"
author: "Nicholas Hayden"
date: "6/12/2018"
output: html_document
---

```{r setup, set-options, include=FALSE, warning=FALSE}
library(rsvg)
library(magick)

paths <- c(
"~/path/to/my1.svg",
"~/path/to/my2.svg")

for (i in 1:length(paths)) {
  print(image_read_svg(paths[i]))
}
```

编辑:

阐明问题的一些例子。

Rmd命令:

![]("~/path/to/my1.svg")失败并产生......

File "/Users/nicholashayden/Desktop/path/to/my1.svg" not found in resource path
Error: pandoc document conversion failed with error 99

@mikeck指出。这可能是一个路径问题。但是,在没有~的情况下尝试会产生相同的错误。

<img src="/Users/nicholashayden/path/to/my1.svg">的html纯文本将图像置于html文档中,而~版本失败时出现与前一版相同的错误。

knitr::include_graphics()方法使用绝对路径或带~

的路径生成空格

2 个答案:

答案 0 :(得分:2)

我认为你想使用include_graphics

```{r}
for (i in 1:length(paths)) {
  print(knitr::include_graphics(paths[i]))
}
```

答案 1 :(得分:0)

我认为我找到了这个问题的解决方案,它有点伪解决方案,可以完成任务,但没有解释产生问题的潜在机制。

根据knitr::include_graphics()文档,path参数为A character vector of image paths - 强调向量。我们可以在没有.svg的情况下显示magick个文件,只需在示例的参考资料中使用以下代码。

# From example
paths <- c(
"/Users/nicholashayden/path/to/my1.svg",
"/Users/nicholashayden/path/to/my2.svg")

# Solution
knitr::include_graphics(paths)

这样我们可以避免使用由于某种原因导致此问题的for循环。但是,这不适用于路径字符串中的~。我的问题是忽略假设knitr::include_graphics()函数中的参数。希望这对未来的任何人都有帮助。