2013-07-30 75 views
2

我有問題。Markdown with knitr在一次編譯中運行兩套代碼

我正在使用R studio Markdown構建一個html文件。

在我的markdown文件中,我希望將R代碼分成兩段,分別運行。

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

``` 

現在我要運行另一組代碼。

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

但是,第二個代碼無法運行,因爲R沒有加載映射包。

有什麼辦法可以保存第一個代碼結果並將它傳遞給第二個代碼?

回答

2

爲什麼在第一塊上使用cache=TRUE?這是問題的來源。打開緩存時,請記住下次編譯文檔時將跳過塊,這意味着require(maps)將不會執行。

knitr試圖保留副作用像加載包(see documentation),但只適用於緩存的塊。如果您在緩存的塊中加載包,但在未緩存的塊中使用它,則不起作用。綜上所述,

  1. 要麼不使用緩存
  2. 或使用緩存一致

緩存是非常棘手的。在投入生產之前,請務必仔細閱讀文檔。

+0

非常感謝Yihui。 – user2620225