【问题标题】:knitr updated from 1.2 to 1.4 error: Quitting from linesknitr 从 1.2 更新到 1.4 错误:退出行
【发布时间】:2013-08-20 13:32:01
【问题描述】:

我最近将 knitr 更新到 1.4,从那以后我的 .Rnw 文件无法编译。 文档内容丰富(7 章,包含在 child="" 中)。 现在,在最近的 knitr 版本中,我收到一条错误消息:

    Quitting from lines 131-792 (/DATEN/anna/tex/CoSta/chapter1.Rnw) 
    Quitting from lines 817-826 (/DATEN/anna/tex/CoSta/chapter1.Rnw) 
    Fehler in if (eval) { : 
    Argument kann nicht als logischer Wert interpretiert werden

(最后两行表示 knitr 正在寻找一个逻辑但它找不到它。 在第 131 行和第 817 行,两个数字结束。单独编译这些片段将起作用。 我不知道如何解决这个问题。 提前感谢任何可以解决我的问题的提示。

这里是 sessionInfo()

    R version 2.15.1 (2012-06-22)
    Platform: x86_64-pc-linux-gnu (64-bit)

    locale:
      [1] LC_CTYPE=de_DE.UTF-8       LC_NUMERIC=C              
      [3] LC_TIME=de_DE.UTF-8        LC_COLLATE=de_DE.UTF-8    
      [5] LC_MONETARY=de_DE.UTF-8    LC_MESSAGES=de_DE.UTF-8   
      [7] LC_PAPER=C                 LC_NAME=C                 
      [9] LC_ADDRESS=C               LC_TELEPHONE=C            
      [11] LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C       

      attached base packages:
      [1] tools     stats     graphics  grDevices utils     datasets  methods  
      [8] base     

      other attached packages:
      [1] knitr_1.4

      loaded via a namespace (and not attached):
      [1] compiler_2.15.1 digest_0.6.3    evaluate_0.4.7  formatR_0.9    
      [5] stringr_0.6.2   tcltk_2.15.1   

按照Hui的建议,我分别运行每一章 针织(“第1章.Rnw”) 等等。不会出现错误消息,并创建单独的 tex 文件。为了提供更多信息,我显示了部分代码。 有一个主文档,其中设置了几个选项

     <<options-setting,echo=FALSE>>=
     showthis <- FALSE
     evalthis <- FALSE
     evalchapter <- TRUE
     opts_chunk$set(comment=NA, fig.width=6, fig.height=4)
     @

每个章节都通过子块使用,例如第 1 章是从

调用的
     <<child-chapter1, child='chapter1.Rnw', eval=evalchapter>>=
     @

上面给出了编织主 Rnw 文件时出现的错误消息。 相关的Figure环境如下

     \begin{figure}[ht]
       \centering
      <<wuerfel-simulation,echo=showthis,fig.height=5>>=
      data.sample6 <- sample(1:6,repl=TRUE,100)
      table(data.sample6)
      barplot(table(data.sample6)/100,col=5,main="Haeufigkeiten beim Wuerfeln")
      @ 
      \caption{Visualisierung beim W"urfeln. 100 Versuche.}
      \label{fig:muent-vis}
      \end{figure}

这不是很高级,但是错误还是和之前给出的一样。 退出行涉及一个长文本,从第 131 行(第一个块的结尾)到第 792 行(后续块的开始),即

       << zeiten, echo=showthis,eval=evalthis>>=
       zeiten <- c(17,16,20,24,22,15,21,15,17,22)
       max(zeiten)
       mean(zeiten)
       zeiten[4] <- 18; zeiten
       mean(zeiten)
       sum(zeiten > 20)
       @

正确关闭块有问题吗?

我现在找到了错误,并提供了一段带有可重现错误消息的短代码。它涉及对涉及 Sexpr 的子进程的条件评估:

主文件如下

    \documentclass{article}
    \begin{document}
    <<options-setting,echo=FALSE>>=
    evalchapter <- TRUE
    @
    <<test,child="test-child.Rnw", eval=evalchapter>>=
    @ 
    \end{document}

相关的子文件'test-child.Rnw'是

     <<no-sexpr>>=
     t <- 2:4
     @ 
     text \Sexpr{(t <- 2:4)}

按“原样”编织此错误消息会从上面给出错误消息。去除孩子的 Sexpr 一切都很好。 但是,如果我删除子文件调用中的条件,即没有 'eval=evalchapter'

由于我经常使用 Sexpr,因此我希望找到解决此问题的方法。正如我之前提到的,在 knitR 版本 1.2 之前没有任何问题。

【问题讨论】:

  • 我提出了上面的问题。让我发表以下评论:如果我在主文档中插入子文件,那么错误就会消失。所以,上面的问题是使用子文档的问题。
  • 这听起来很难诊断;您可以执行的第一步是在交互式 R 会话中运行 library(knitr); knit('Chapter1.Rnw'),当出现错误时,运行 traceback() 并将输出粘贴到此处
  • 我听从了你的建议。分别编织每一章,错误信息不显示。单独的 .tex 文件成功生成。
  • knit('main.Rnw')traceback() 怎么样?
  • 我几天前已经更新了这个问题,但没有发表评论。因此,上面有一个带有子项的“最小”Rnw 文件,它重现了错误。它是关于条件子文件中的 Sexpr

标签: r knitr


【解决方案1】:

这与 knitr 1.3 的变化有关,在NEWS 中提到:

knit_child() 中添加了参数options 来设置子文档的全局块选项;如果父块调用子文档(通过child 选项),则父块的块选项将用作子文档的全局选项,例如对于&lt;&lt;foo, child='bar.Rnw', fig.path='figure/foo-'&gt;&gt;=,图形路径前缀将是figure/foo- in bar.Rnw;申请见How to avoid figure filenames in child calls

这导致了内联 R 代码的错误。在您的情况下,块选项 eval=evalchapter 在用于评估内联代码时未评估。我已经修复了development version v1.4.5 on Github 中的错误。

【讨论】:

  • 感谢您的努力。现在,上面的代码几乎是正确的。由于某种原因,没有在数字周围放置数学环境,因此 tex 代码不正确。这可以在将 test-child 中的 \Sexpr{(t &lt;- 2:4)} 替换为更高级的 \Sexpr{2* pnorm(-(2:4))} 时看到。在这种情况下,输出扩展为 ...6.3342\times 10^{-5},tex 编译器停止!我希望你能解决这个问题。
  • 我认为我现在必须在每个\Sexpr 周围放置$ \times $,对吗?之前,这是在没有另行通知的情况下完成的。
  • @user2694363 感谢您的报告!新问题已在 Github 上的 knitr 1.4.7 中解决
猜你喜欢
  • 2016-11-29
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 2011-09-08
  • 2013-06-23
  • 1970-01-01
相关资源
最近更新 更多