Knitr全球环境

时间:2014-03-18 19:06:08

标签: r knitr

我似乎无法让R markdown / knitr在我的全球环境中看到/使用对象。

根据我的阅读,knitr应该使用全局环境作为标准,但我在代码块中包含的每个对象都会返回错误

## Error: object 'XXX' not found

我在这里错过了一些非常简单的东西吗? 我是否需要首先从全局环境手动加载对象?

提前致谢

玛蒂

2 个答案:

答案 0 :(得分:5)

如果您已将对象保存到文件中,那么用于降价的一种干净方法如下:

if(file.exists("rfModel.Rda")){
  load("rfModel.Rda")} else {
modFit <- train(class~.,method="rf",data=train)
}

这有效地绕过了漫长的模型构建时间,只有在它不作为对象存在时才构建它,这样它才能保持可重复性。这类似于缓存的想法,但更通用的是恕我直言。

答案 1 :(得分:2)

听起来您希望使用相同的代码来处理knitr和您的全局环境。在构建需要在构造期间进行测试的复杂Rmd文件时,这非常有用。

问题在于knitr在你按下knit时使用本地文件夹,而不是寻找项目主文件夹(即你的Rproj - 我假设你使用相对路径)。因此,当您运行代码时,它只适用于其中一个。解决这个问题的方法是使用项目文件夹的相对路径在您的Rmd中编写代码(就像在普通的R脚本中一样),并重定向knitr以使用项目主文件夹。为此,请在rmd脚本的顶部插入以下代码。

 ```{r setup, include=FALSE}
    library(knitr)

    dd <- getwd()
    knitr::opts_knit$set(root.dir  = paste0(dd,'/../../'))
    knitr::opts_chunk$set(cache.path = paste0(dd,'/cache/'))
    knitr::opts_chunk$set(fig.path = paste0(dd,'/figures/')) 

    ```

此代码执行以下操作:

  • 首先,找到rmd的当前目录。
  • 第二步,设置项目根目录。我保存我的文件两个文件夹,因此'/../../',这将需要调整您的文件夹结构。
  • 第三,您需要手动设置缓存文件夹路径,因为默认设置不再有效,因此缓存无法正常工作。
  • 最后,对数字文件夹执行相同操作,同样需要覆盖默认值。

快乐的编码。