设置knitr chunk

时间:2017-03-20 23:04:55

标签: r rstudio knitr

我有一个RStudio笔记本,我想将笔记本电脑块设置为在自定义R环境中运行。我想这样做是因为我实际上在同一个项目中使用多个笔记本,并且它们共享许多变量和函数,但最终会进行略微不同的分析。我使用相同的RStudio实例,因此使用相同的R实例,但是当我在笔记本之间来回切换时,我不想担心覆盖变量。

我知道我可以使用envir参数knitr::knit()来完成整个文档,但由于我以交互方式使用RStudio笔记本,我想将环境设置为块级,而不是文档级别。理想情况是下面的Rmd文档:

```{r setup}
my.environment = new.env(parent = globalenv())
knitr_opts$set(envir = my.environment)
```
... markdown content...

```{r another-chunk}
a = 5  # a is assigned in my.environment 
```

当然,上述情况是不可能的,因为没有envir knitr选项。

我认为解决方案可能是使用knitr钩子。一个理想的解决方案看起来像这样:

knit_hook$set(set_envir = function(before, options, envir){
  if(before)
    set.environment(options$set_envir)
  else
    set.envir(globalenv())
})

当然,这是不可能的,因为R中没有set.envir功能允许您设置当前的工作环境。

实际的解决方案可能是使用withwithin之类的东西,或者将块内容作为shquote或类似的东西传递给函数。任何帮助表示赞赏!

0 个答案:

没有答案