我最近将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的建议,我分别运行每一章 针织( “chapter1.Rnw”) 等等。不会出现错误消息,并且会创建单独的tex文件。为了提供更多信息,我显示了部分代码。 有一个主文档,其中设置了几个选项
<<options-setting,echo=FALSE>>=
showthis <- FALSE
evalthis <- FALSE
evalchapter <- TRUE
opts_chunk$set(comment=NA, fig.width=6, fig.height=4)
@
每章都通过子块使用,例如:第一章是从
调用的 <<child-chapter1, child='chapter1.Rnw', eval=evalchapter>>=
@
上面给出了编织主Rnw文件时出现的错误消息。 相关的图形环境如下
\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没有问题。
答案 0 :(得分:1)
这与knitr 1.3的变化有关,并在NEWS中提及:
向
options
添加了一个参数knit_child()
,以便为子文档设置全局块选项;如果父块调用子文档(通过child
选项),则父块的块选项将用作子文档的全局选项,例如,对于<<foo, child='bar.Rnw', fig.path='figure/foo-'>>=
,数字路径前缀在figure/foo-
中为bar.Rnw
;请参阅How to avoid figure filenames in child calls了解申请
这导致了内联R代码的错误。在您的情况下,当用于评估内联代码时,不会评估块选项eval=evalchapter
。我修复了development version v1.4.5 on Github中的错误。