r - 渲染 RMarkdown 文档时修改全局环境

标签 r r-markdown knitr

考虑这个保存在文件 test.rmd 中的最小 RMarkdown 示例:

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

如果您使用 rmarkdown::render("test.rmd") 渲染此文件,对象 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() 周围包装另一个函数,例如

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 修改global 环境。我如何实现这一点?

最佳答案

让我先声明一下,我认为这是一个非常糟糕的主意。渲染应该发生在它自己的范围内,最好是它自己的 R 进程,正是为了避免干扰(我什至更进一步:默认情况下它工作的事实是 API 中的正确性缺陷)。

但是您可以将评估环境传递给 rmarkdown::render:

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

关于r - 渲染 RMarkdown 文档时修改全局环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58644441/

相关文章:

r - 检查两个字符串是否是字谜

regex - 根据特定元素的位置在字符串向量中插入连字符或破折号

删除 R 中 apply 语句和函数后面的逗号

r - 有没有办法使用 RStudio 直接从你的工作区中输出 knitr markdown?

R:Knit 语法表达式为文本

r - 我怎样才能摆脱 Rmd 中 geom_smooth 的评论?

database - R (RStudio) 中的 ODBC 新手,遇到连接失败错误?

r - 具有附加条件的唯一唯一变量的累积和

r - 在不同的文件位置从 R Markdown 创建 PDF

r - R markdown 中投影仪的颜色变化