2017-08-04 21 views
0

我有一個由Access中的參數組成的系統,它由R腳本讀取,然後R腳本啓動一個Rmarkdown報告。在Rmarkdown中,構建了一個Stata腳本,該腳本讀取數據文件並創建由Access參數指定的圖形。要將Stata圖形放入報告中,我必須將其作爲PNG文件存儲並在Rmarkdown代碼中鏈接到此文件。最後,報告呈現爲一個Word文件(使用knitr和Pandoc)。如何從rmarkdown鏈接可變數量的文件

在目前的設置中,我在報告中有幾個地方可以調用圖表。我可以爲每個地方創建一個PNG文件,我知道文件名(由Access參數控制),並使用標準命令![](path/to/filename.png鏈接到每個文件。這工作正常。

下一個開發步驟是在每個地方,我需要創建一個未知和不同數量的PNG文件(最多約20個文件)。我會在斯塔塔做這個。問題是鏈接到Rmd代碼中的不同數量的文件。我還沒有找到辦法做到這一點,並需要如何建議。

我對解決方案有一些想法,但我找不到執行它們的命令或語法。我已閱讀Rstudio.com上的Rmarkdown簡介和來自同一來源的Rmarkdown參考指南(5頁)。我對R和Rmarkdown都比較陌生,所以我可能會忽視或不瞭解有一個解決方案。

  • 是否可以在Rmarkdown中設置循環或分支(例如「if」,「for」或「while」)?然後我可以遍歷當前數量的文件,或者分支未使用的文件鏈接。
  • 我可以提取某個目錄中的所有文件,例如:通過在文件名中包含通配符的鏈接?或者有另一種方法來實現這一目標?
  • 有沒有辦法鏈接到目前運行中不存在的文件,而不會崩潰程序?然後我可以建立足夠的鏈接來覆蓋所有可預見的情況。

或者,有沒有人有其他建議?

回答

0

當然,你可以如果你想過濾某些PNG文件,您可以在pattern參數擴展到一些更復雜的正則表達式使用像

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

循環。對於exampele,如果我只希望包含在他們的名字「2017年7月11日」 PNG文件,我會做

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

其中.*任何字符匹配。