如何链接rmarkdown

时间:2017-08-04 07:28:17

标签: r-markdown pandoc

我有一个由Access中的参数组成的系统,由R脚本读取,然后启动Rmarkdown报告。在Rmarkdown中,构建了Stata脚本,该脚本读取数据文件并创建由Access参数指定的图形。要将Stata图表添加到报表中,我必须将其存储为PNG文件,并在Rmarkdown代码中链接到此文件。最后,报告呈现为Word文件(使用knitr和Pandoc)。

在目前的设置中,我在报告中有几个地方可以调用图表。我可以为每个地方创建一个PNG文件,我知道文件名(由Access参数控制),我使用标准命令![](path/to/filename.png链接到每个文件。这很正常。

下一个开发步骤是,在每个地方,我需要创建一个未知和不同数量的PNG文件(最多约20个文件)。我会在Stata做这件事。问题是链接到Rmd代码中的不同数量的文件。我还没有办法做到这一点,并且需要有关如何做的建议。

我对解决方案有一些想法,但我找不到实现它们的命令或语法。我已经阅读了Rstudio.com上的Rmarkdown简介和来自同一来源的Rmarkdown参考指南(5页)。我对R和Rmarkdown都很陌生,所以我可能忽视或不理解有一个解决方案。

  • 是否可以在Rmarkdown中设置循环或分支(例如"如果",""或"而#34;)?然后我可以遍历当前数量的文件,或分支未使用的文件链接。
  • 我可以获取某个目录中的所有文件,例如通过在文件名中创建包含通配符的链接?还是有其他方法可以实现这个目标吗?
  • 有没有办法链接到当前运行中不存在的文件,而不会导致程序崩溃?然后我可以设置足够的链接来涵盖所有可预见的案例。

或者,有人有其他建议吗?

1 个答案:

答案 0 :(得分:0)

当然,你可以使用像

这样的循环
```{r, results="asis"}
files <- list.files(path = '/path/to/your/pngdirectory/', 
                    pattern = '\\.png', full.names = T)
for(f in files) cat(paste0('![](',f,')\n'))
```

如果要筛选某些png文件,可以将pattern参数扩展为更复杂的正则表达式。例如,如果我只想要包含&#39; 2017-07-11&#39;在他们的名字我会做

list.files(path = '/Users/martin/Dropbox/Screenshots', 
           pattern = '.*2017-07-11.*\\.png', full.names = T)

其中.*匹配任何字符。