[英]Source nested R files within Rmarkdown document
我正在用一些R
代碼塊編寫Rmd
報告,很明顯。 我的代碼結構如下:
functions.R
腳本DataDependency.R
腳本,這已經為這些任務提供了functions.R
。analysis.R
腳本采購DataDependency.R
furtheranalyis.R
采購analysis.R
,從那時起我就不必多次寫一些步驟因此,我在很大程度上依賴於以嵌套方式源文件的函數。 但是,我無法在RMarkdown
中完成此操作,這每次都會給我錯誤(見下文)。 是我太笨還是缺少這個功能?! 迄今為止的所有嘗試都導致錯誤。
我看到的有關該主題的其他問題僅包括在.Rmd
文件中的.Rmd
.Rmd
( 此處)以及source()
和read_chunk()
之間的區別( 此處)。 兩者都沒有回答我的問題。
我已經嘗試確保它確實是產生錯誤的嵌套源。 所以這是一個最小的工作示例:
文件mweA.R
x = 1:10
和文件mweB.R
source("./mweA.R")
y = x * x
現在,在我的.Rmd
文件中,我只想加載文件 B(如果必須的話,也可以同時加載),然后繼續:
```{r}
source("./mweB.R")
plot(y ~ x)
```
即使我這樣做:
```{r}
source("./mweA.R")
source("./mweB.R")
plot(y ~ x)
```
出現同樣的錯誤,即:
Error in file(filename, "r", encoding = encoding) : cannot open the connection Calls: <Anonymous> ... source -> withVisible -> eval -> source -> file Execution halted
請注意,如果我只是執行source("./mweA.R")
或獲取任何其他非依賴R
腳本,我不會收到錯誤source("./mweA.R")
。
希望您必須在塊中指定一個(或多或少)秘密參數來解決所有這些問題。 我真的很難處理 Rmarkdown 的代碼塊,而且我通常不清楚錯誤是什么。 這主要使我無法從latex
切換到RMarkdown
...
您面臨的問題與knitr
或能夠正確嵌套文檔無關,而是 R 項目“工作目錄rmarkdown
”的產物,因為rmarkdown
將相對於文件目錄編織文檔,而不是項目根。 這會導致不同的相對路徑,具體取決於文檔是在項目會話還是knitr
會話中運行。
除了要點之外,此問題還顯示了許多解決方法:
knitr 具體:
為所有要評估的塊設置一個根目錄,而不是相對於文檔位置。
opts_knit$set(root.dir = '/Users/username/path_to_project')
一般情況:
使用rprojroot
或here
(后者是前者的包裝器),它使用多個標准來確定文件的頂級目錄。 您不需要使用 RStudio 項目來實現這一點。
使用here::here
調用對另一個本地文件的任何引用,無論調用它的子目錄如何,它都會解析到相同的位置。
source(here("functions.R"))
source(here("subdirectory", "DataDependency.R"))
source(here("subdirectory2", "furtheranalyis.R"))
這可能是一個更好的解決方案,因為它不依賴於knitr
選項。 或者,您可以使用rprojroot
設置root.dir
塊:
opts_knit$set(root.dir = rprojroot::find_rstudio_root_file())
如果您使用的是 RStudio 項目。 如果沒有,請使用具有指定條件的rprojroot::find_root
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.