使用read_chunk('foo.R')的Lyx + knitr代码外部化失败

时间:2013-02-19 02:52:38

标签: r knitr lyx

我正在尝试使用read_chunk()将我的R代码与我的Lyx文件分开,如here所述。

我的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'。

我很感激任何建议。

1 个答案:

答案 0 :(得分:3)

您必须在与Lyx文档中的块标签对应的minimal.R中的代码中添加标签,否则knitr不知道在何处插入代码。

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

如果您在knitr web page中打开R脚本,则会看到## @knitr label形式的多行注释。我将更新网页以澄清这一点。还有另一种方法可以指定标签,这些方法记录在?knitr::read_chunk

你的LyX文档的第二个问题是你将read_chunk()放在boring-random块中,但是你真的需要在之前阅读代码,然后将它插入一个块。

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