我似乎无法让R markdown / knitr在我的全球环境中看到/使用对象。
根据我的阅读,knitr应该使用全局环境作为标准,但我在代码块中包含的每个对象都会返回错误
## Error: object 'XXX' not found
我在这里错过了一些非常简单的东西吗? 我是否需要首先从全局环境手动加载对象?
提前致谢
玛蒂
答案 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/'))
```
此代码执行以下操作:
快乐的编码。