gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:04:53 26 4
gpt4 key购买 nike

考虑这个保存在文件 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com