簡體   English   中英

渲染 RMarkdown 文檔時修改全局環境

[英]Modify global environment when rendering RMarkdown document

考慮這個最小的 RMarkdown 示例,保存在文件test.rmd

```{r}
foo <- "bar"
```

如果您使用rmarkdown::render("test.rmd")渲染此文件,則 object foo將在您的全局環境中找到:

> foo
Error: object 'foo' not found
> rmarkdown::render("test.rmd")
[...]
Output created: test.html
> foo
[1] "bar"
> 

同樣,如果foo已在全局環境中定義,它將被修改:

> foo <- "baz"
> rmarkdown::render("test.rmd")
[...]
Output created: test.html
> foo
[1] "bar"

到目前為止,一切都很好。

但是,出於我自己的原因,我想在render()周圍包裝另一個 function ,例如

myrender <- function(f) render(f, output_format="html_document")

現在,當我調用myrender("test.rmd")時, foo變量被導出到父環境,在這種情況下,導出到myrender中的環境,我不能再從全局環境訪問它:

> myrender("test.rmd")
[...]
Output created: test.html
> foo
Error: object 'foo' not found

雖然這是預期的行為,但我仍然希望render能夠修改全局環境。 我如何實現這一目標?

讓我先說我認為這是一個非常糟糕的主意。 渲染應該發生在它自己的 scope 中,理想情況下是它自己的 R 進程,正是為了避免干擾(我什至 go 進一步:事實上,這個缺陷在 API 中是正確的)。

但是您可以將評估環境傳遞給rmarkdown::render

myrender <- function(f) render(f, output_format = "html_document", envir = globalenv())

暫無
暫無

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

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