2015-01-12 75 views
3

我剛開始使用rmarkdown,pandoc和knitr。我有很大的困難,試圖讓pandoc獲取比rmarkdown文檔高一級的圖像。例如,考慮我們的項目目錄〜/測試,下面rmarkdown位於〜/測試/腳本:pandoc和rmarkdown:無法獲取高於rmarkdown文檔一級的圖像

--- 
title: "test" 
--- 

```{r global_options, include=FALSE} 
library('knitr') 
opts_knit$set(root.dir = '~/test') 
``` 

![test](figures/test.svg) 

然後我在〜/ test目錄運行命令Rscript -e "rmarkdown::render('scripts/test.Rmd')"。它給我的錯誤:

pandoc: Could not fetch figures/test.svg 
figures/test.svg: openBinaryFile: does not exist (No such file or directory) 

我會通過設置root.dir是項目目錄有想到,這pandoc相對於該文件將獲取?但似乎「工作目錄」總是設置爲相對於rmarkdown文檔的位置?任何幫助,將不勝感激。謝謝,

>sessionInfo() 
R version 3.1.0 (2014-04-10) 
Platform: x86_64-unknown-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_CA.UTF-8  LC_NUMERIC=C    LC_TIME=en_CA.UTF-8  LC_COLLATE=en_CA.UTF-8  LC_MONETARY=en_CA.UTF-8 LC_MESSAGES=en_CA.UTF-8 
[7] LC_PAPER=en_CA.UTF-8  LC_NAME=C     LC_ADDRESS=C    LC_TELEPHONE=C    LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base 

other attached packages: 
[1] vimcom_1.0-0 setwidth_1.0-3 colorout_1.0-2 

loaded via a namespace (and not attached): 
[1] tools_3.1.0` 
+0

如果您從'scripts'目錄內運行腳本,它會工作嗎? –

+0

不幸的是沒有。當我運行時,cd〜/ test/scripts && Rscript -e「rmarkdown :: render('scripts/test.Rmd')」我得到同樣的錯誤。 – TinyHeero

+0

我認爲你應該從'腳本'裏面運行'scripts/test.Rmd'到'test.Rmd' –

回答

2

Pandoc不知道knitrroot.dir選項。您必須寫入相對於當前工作目錄的路徑,例如../figures/test.svg。或在scripts目錄下運行Rscript

如果您在使用rmarkdownknitr剛開始,我強烈建議你不要使用root.dir選項,除非你真的明白是什麼意思。這些目錄可以是really, really tricky

+0

這讓我感到困惑。當我從〜/ test目錄運行Rscript -e「rmarkdown :: render('scripts/test.Rmd')時,是不是我的工作目錄〜/ test,因爲那是我從哪裏調用的?而且數字是一個文件夾(忘了提及這個)與〜/ test是同一級別的,所以這意味着數字/ test.svg應該正確的路徑,但它不起作用 – TinyHeero

+0

@ user2774754你在R中的工作目錄是〜/〜測試'但是因爲你渲染('scripts/test.Rmd')',我相信rmarkdown會暫時將工作目錄改爲'scripts /',在這種情況下,你必須使用'../figures/test .svg'。我個人建議用戶在它的目錄下編譯一個Rmd文件,並且認爲所有的路徑都是相對於Rmd文件的目錄。如果你從另一個目錄渲染一個Rmd文件,事情會變得非常棘手。 –

+0

ok我之所以喜歡在Rmd上運行Rscript一個目錄是因爲在實踐中我實際上有一個「包裝器」腳本,它調用Rmd文件。包裝腳本是一個R文件,負責加載所有輸入數據和預處理數據。然後它是rmarkdown :: render()函數的腳本。所以,當它加載所有的數據時,數據與我稱之爲的地方有關(這是應該發生的事情)。在實踐中,你是否也加載和處理你的Rmd文件中的所有數據?我想知道,所以我知道什麼是正確的做法... – TinyHeero