首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Knitr全球环境

Knitr全球环境
EN

Stack Overflow用户
提问于 2014-03-19 03:06:08
回答 2查看 7K关注 0票数 13

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

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

代码语言:javascript
复制
## Error: object 'XXX' not found

我是不是遗漏了一些非常简单的东西?

是否需要先从全局环境手动加载对象?

提前感谢

马蒂

EN

回答 2

Stack Overflow用户

发布于 2014-11-17 02:09:40

如果您已经将对象保存到文件中,则用于标记的一种简单方法如下所示:

代码语言:javascript
复制
if(file.exists("rfModel.Rda")){
  load("rfModel.Rda")} else {
modFit <- train(class~.,method="rf",data=train)
}

这有效地绕过了冗长的模型构建时间,只在它还不作为对象存在的情况下构建它,因此它保留了可重复性。这类似于缓存的概念,但更通用的IMHO。

票数 5
EN

Stack Overflow用户

发布于 2017-08-20 20:13:22

听起来你想让相同的代码同时适用于knitr和你的全局环境。当构建在构建过程中需要测试的复杂Rmd文件时,这可能很有用。

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

代码语言:javascript
复制
 ```{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的当前目录。
  • 第二,设置项目根目录。我将我的文件放在两个文件夹中,因此是“/../../”,这将需要根据您的文件夹结构进行调整。
  • 第三,您需要手动设置缓存文件夹路径,因为默认设置不再起作用,因此缓存不起作用。
  • 最后,对figures文件夹执行相同的操作,因为您同样需要覆盖默认设置。

祝你编码愉快。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22488736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档