2013-02-19 25 views
1

我試圖使用read_chunk()將我的R代碼與Lyx文件分開,如here所述。使用read_chunk('foo.R')的Lyx + knitr代碼外部化失敗

我的Lyx安裝程序從knitr_minimal.lyx編譯knitr_minimal.pdf沒有任何問題。

但是然後我試圖替換此:

<<boring-random>>= 
set.seed(1121) 
(x=rnorm(20)) 
mx <- mean(x) 
vx <- var(x) 
@ 

x的第一個元素是\ Sexpr {X [1]}。它的意思是\ Sexpr {mx}。

與此:

<<boring-random, cache=FALSE>>= 
read_chunk('minimal.R') 
@ 

x的第一個元素是\ Sexpr {X [1]}。它的意思是\ Sexpr {mx}。

腳本minimal.R保存在同一目錄中,並且由剛

set.seed(1121) 
(x=rnorm(20)) 
mx <- mean(x) 
vx <- var(x) 

我保存修改後的文件作爲knitr_minimal1.lyx並編譯它。文件knitr_minimal1.pdf編譯好,但不是

x的第一個元素是0.145。其平均值是0.3217。

我看到

x的第一個元素是錯誤的eval(expr中,ENVIR,enclos):對象「X」未找到。它的意思是eval(expr,envir,enclos)中的錯誤:未找到對象'mx'。

我很感激任何意見。

回答

3

您必須在minimal.R的代碼中添加一個標籤,對應於LyX文檔中的塊標籤,否則knitr不知道在哪裏插入代碼。

## @knitr boring-random 
set.seed(1121) 
(x=rnorm(20)) 
mx <- mean(x) 
vx <- var(x) 

如果打開在knitrweb page將R腳本,你會看到的形式## @knitr label的評論幾行。我會更新網頁來澄清這一點。還有一種替代方法來指定標籤,其記錄在?knitr::read_chunk中。

您LyX的文檔的第二個問題是你把read_chunk()boring-random塊,但你真的需要閱讀的代碼,你將它插入塊之前。

<<setup>>= 
read_chunk('minimal.R') 
@ 
<<boring-random>>= 
@ 
+0

謝謝Yihui,但是這仍然會產生相同的錯誤信息。除了添加你提到的標籤外,我還嘗試了'read_chunk(「minimal.R」,labels =「boring-random」,from = 1,to = 5)和'read_chunk(「minimal.R」,labels =「boring -random「,from = 2,to = 5)''和'read_chunk(」minimal.R「,labels =」boring-random「)'無濟於事。你提出了[knitr代碼外化](http:// yihui。名稱/ knitr/demo/externalization /)頁面,因爲這就是它開始的地方。但是一旦我理清了'knitr_minimal1.lyx',我就會明白這一點。 – Gabi 2013-02-19 14:59:10

+0

@加比好吧,剛剛意識到了另一個問題。查看更新後的答案。也許你沒有閱讀過PDF手冊(http://yihui.name/knitr/demo/manual/),並且太快地跳到這個特性中,所以出現了誤解。 – 2013-02-19 16:53:39

+0

Duh。抱歉。當然,這很好。現在來看我的代碼外部化的原始示例。原來,我需要一些軟件包,然後才能運行你的作業示例:到目前爲止,報告中缺少前兩個「tikzDevice」和「filehash」。順便說一句,在嘗試從Rstudio中的Rnw編譯PDF時,這樣做更容易理解。 LyX錯誤信息起初毫無幫助,然後Lyx意外退出,並邀請向Apple報告此事。我會報告我的進展。再次感謝。 – Gabi 2013-02-19 18:10:44