使用knitr进行Markdown在一次编译中运行两组代码

时间:2013-07-30 23:57:22

标签: r markdown knitr

我有一个问题。

我正在使用R studio Markdown构建一个html文件。

在我的降价文件中,我希望将R代码分成两段,并分别运行。

```{r  cache=TRUE, echo=TRUE, include=FALSE}
require(maps)

```

现在我将运行另一组代码。

```{r}
japan <- map("world", "japan", plot=T)
```

但是,第二个代码无法运行,因为R没有加载地图包。

有没有办法保存第一个代码结果并将其传递给第二个代码?

1 个答案:

答案 0 :(得分:2)

为什么在第一个块上使用cache=TRUE?这就是问题的根源所在。当您打开缓存时,请记住下次编译文档时将跳过该块,这意味着require(maps)将不会被执行。

knitr会尝试保留副作用,例如加载包(see documentation),但这仅适用于缓存的块。如果您在缓存的块中加载一个包,但在未缓存的块中使用它,它将无法工作。总结一下,

  1. 要么不使用缓存
  2. 或始终使用缓存
  3. 缓存非常棘手。在投入生产之前,请务必仔细阅读文档。