[英]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.