簡體   English   中英

在另一個文檔中包含一個 Markdown 文檔中的特定塊

[英]Include a specific chunk from one markdown document in another document

我想將一個 Markdown 文檔的特定塊中的代碼包含到第二個 Markdown 文檔中。 我想通過按名稱引用塊來做到這一點(請不要對 line-numbers 進行黑客引用)。 我不想在孩子中運行所有代碼,因為其中一些相當耗時。

這是我嘗試過的。 我們有read_chunk用於在降價文檔中包含純R腳本。 run_chunk但不清楚這是否可以與外部文檔一起使用(到目前為止我還沒有運氣)。

我們可以做讓整個降價文檔里面的另一個運行:

```{r child='first.Rmd'}
```

但是我怎樣才能從一個子文檔中獲取一個特定的塊到另一個文檔中呢? 這是一個小例子:

這是test-main.Rmd

```{r pick-up-the-kid, child='test-child.Rmd'}
```

這是test-child.Rmd

Hi, there. I'm a child.

```{r test-child-1}
1+1
dnorm(0)
```

```{r test-child-2}
2+2
dnorm(0)
```

當我們運行test-main.Rmd我們得到:

Hi, there. I’m a child.

1+1
## [1] 2
dnorm(0)
## [1] 0.3989
2+2
## [1] 4
dnorm(0)
## [1] 0.3989

一種幾乎可以做到的方法是ref.label 如果我們像這樣編輯test-main.Rmd

```{r pick-up-the-kid, child='test-child.Rmd', ref.label='test-child-2'}
```

輸出只有所需的塊,但它是重復的,這是不好的:

Hi, there. I’m a child.

2+2
## [1] 4
dnorm(0)
## [1] 0.3989
2+2
## [1] 4
dnorm(0)
## [1] 0.3989

重復的一種解決方案是在子文檔的塊選項中使用eval = FALSE, echo = FALSE

```{r test-child-2, eval = FALSE, echo = FALSE}
2+2
dnorm(0)
```

這給出了所需的結果:

2+2
## [1] 4
dnorm(0)

但這並不方便更改子文檔中的塊,因為子文檔中的其他塊需要該塊,而且我不想每次運行主文檔時都更改子文檔中的幾個塊,這對重現性不利。

我怎樣才能得到只有大塊test-child-2test-child.Rmdtest-main.Rmd參照塊名稱(無重復或塊選項擺弄)?

我正在尋找一個可以稱為child_chunk的函數,我可以在其中給出子文檔名稱和塊名稱,並在主文檔中對其應用塊選項,這些選項獨立於子文檔中的塊選項。

或者是將代碼移動到R腳本文件中並在兩個 Markdown 文檔之間共享它們的唯一解決方案?

我會嘗試purl -ing 原始子文檔,然后從代碼纏結文件中讀取塊,然后您可以將其刪除。

這是test-main.Rmd

```{r echo=FALSE}
invisible(purl("test-child.Rmd", output="temp", quiet=TRUE))
read_chunk("temp")
```

```{r ref.label='test_child_2'}
```

```{r echo=FALSE}
unlink("temp")
```

我修改了您的test-child.Rmd以使用不同的標簽,因為您的標簽不適用於我的機器:

你好呀。 我是個孩子。

```{r test_child_1}
1+1
dnorm(0)
```

```{r test_child_2}
2+2
dnorm(0)
```

knit('test-main.Rmd')的輸出是這樣的:

```r
2+2
```


```
## [1] 4
```

```r
dnorm(0)
```

```
## [1] 0.3989
```

在 2021 年,您可以使用

```{r, include=F, cache=F}
knitr::read_chunk("my_file.Rmd")
```

```{r my_reusable_chunk}```
```

其中對文件myfile.Rmd感興趣的塊包含以## ----為前綴的行:

## ---- my_reusable_chunk

資料來源: https : //bookdown.org/yihui/rmarkdown-cookbook/read-chunk.html

這並不完全符合原始問題應該使用塊名稱的要求,但它不需要更多的努力(只需包括魔術注釋)。

(雖然我發現很難調試包含的塊......)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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