【问题标题】:Lyx+knitr code externalization with read_chunk('foo.R') fails使用 read_chunk('foo.R') 的 Lyx+knitr 代码外部化失败
【发布时间】:2013-02-19 02:52:37
【问题描述】:

我正在尝试使用 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 的第一个元素是 Error in eval(expr, envir, enclos) : object 'x' not found。它的意思是 eval(expr, envir, enclos) 中的错误:找不到对象“mx”。

如果有任何建议,我将不胜感激。

【问题讨论】:

    标签: r knitr lyx


    【解决方案1】:

    你必须在minimal.R中为你的代码添加一个标签,对应你LyX文档中的块标签,否则knitr不知道在哪里插入代码。

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

    如果你打开knitrweb page中的R脚本,你会看到几行## @knitr label形式的cmets。我将更新网页以澄清这一点。有另一种指定标签的方法,在?knitr::read_chunk 中有记录。

    您的 LyX 文档的第二个问题是您将 read_chunk() 放入了 boring-random 块中,但您确实需要在将其插入块之前 阅读代码。

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

    【讨论】:

    • 谢谢一辉,但这仍然会产生同样的错误信息。除了添加您提到的标签外,我还尝试了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 code externalization 页面,因为这就是一切的开始。但是,一旦我解决了knitr_minimal1.lyx,我就会解决这个问题。
    • @Gabi 好的,刚刚意识到另一个问题。请参阅更新的答案。可能你没有阅读 PDF 手册(yihui.name/knitr/demo/manual),太快进入这个功能,所以有误会。
    • 呃。对不起。当然,这非常有效。现在来看我最初的代码外部化示例。原来我需要一些包才能运行你的作业示例:tikzDevicefilehash 是迄今为止报告的前两个缺失。顺便说一句,这在尝试从 Rstudio 中的 Rnw 编译 pdf 时更容易弄清楚。 LyX 错误消息一开始没有帮助,然后 Lyx 意外退出,并邀请向 Apple 报告此问题。我会报告我的进展。再次感谢。
    • 安装了这两个 R 包——来自 R-forge 的 tikzDevice 和来自 CRAN 的 filehash——我可以编译 Stat546-HW4-Xie.RnwStat546-HW4-Xie.lyx。一切都很好。
    • 请参阅 LyX/Sweave 手册进行故障排除(第 4 节):yihui.name/knitr/demo/lyx 错误对话框根本没有帮助。
    猜你喜欢
    • 2019-07-06
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    相关资源
    最近更新 更多