簡體   English   中英

Rmarkdown 文檔中的源嵌套 R 文件

[英]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')

一般情況

使用rprojroothere (后者是前者的包裝器),它使用多個標准來確定文件的頂級目錄。 您不需要使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM