【问题标题】:Using variables defined in R environment within knitr在 knitr 中使用 R 环境中定义的变量
【发布时间】:2015-09-16 20:05:20
【问题描述】:

我想使用 knitr 生成一个文档,其中包含在 R 中单独定义的数字、表格和图形。我有一个单独的 .R 脚本,我在其中定义了感兴趣的变量,并且我已经执行了这个脚本并验证变量是否在内存中。然后,在.Rmd 文件中,我有 R 标记代码,我尝试在其中显示我在 R 中定义的变量。每当我尝试编织时,我都会收到错误消息,说明如下:

unique(c("AsIs", oldClass(x))) 中的错误:找不到对象“lamdaQ6”...

显然,knitr 进程启动了一个新环境,该环境排除了已定义的变量。我有相当广泛的 R 代码来定义要包含在文档中的变量,我希望将其与 R 标记代码分开(为了清楚起见,并且因为 R 标记不是 R 的良好开发环境)。

是否有一些方法可以在 knitr 中保留对 R 内存中现有变量的认识?我已经广泛搜索并没有找到解决方案,可能是因为我不知道正确的术语。

【问题讨论】:

  • 您可以通过在一个块中获取.R 脚本来执行您的代码。
  • 这是有道理的。但是,我在文档的顶部(在“标题”部分之后)这样做了,采购过程没有问题,但随后它继续给出相同的错误,即无法找到该 R 文档中定义的数据。在此之前,我还尝试将缓存设置为 true。这是我在标题部分之后添加的内容(R 代码定义了变量 lambdaQ6): [code]{r setup, include=FALSE} knitr::opts_chunk$set(cache=TRUE) {r,echo=FALSE} setwd("c:\\Kinetics") source("Kinetics.R") Decay Rate: lambda = r lamdaQ6[/code]

标签: knitr


【解决方案1】:

Paul Roub 提供的解决方案奏效了——我认为它没有,但结果证明是我自己的错字造成的。

一个更简洁的解决方案是使用“保存”来仅保存创建文档所需的对象,而不是获取整个 R 文件。我在 .R 文件的末尾添加了一行来保存对象,然后使用“load”将对象加载到 .Rmd 脚本的顶部。

所以,在 .R 文件的末尾,为了保存对象 XX 和 YY,我有:

保存(XX,YY,file="Data4Rmd.RData")

然后,在 .Rmd 文件的开头附近,要导入这些对象,我有:

```

{r,echo=FALSE}

setwd("c:\CurrentProjectDirectory")

加载(file="Data4Rmd.RData")

```

这让我以后可以使用如下语句:

衰减率为 lambda = `r XX`,平均寿命为 `r YY`。

另一种选择可能是保存和加载整个工作区,但这似乎太过分了。

感谢保罗的帮助,非常感谢:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2016-02-14
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    相关资源
    最近更新 更多