使用 etoolbox 中的切换按钮来打开或关闭 Sweave Schunks 代码

使用 etoolbox 中的切换按钮来打开或关闭 Sweave Schunks 代码

我想使用切换按钮来etoolbox指示 Sweave 评估或不评估代码块。示例:

\newtoggle{FirstTime}
\toggletrue{FirstTime}
%\togglefalse{FirstTime}

\iftoggle{FirstTime}{
<<>
 read.csv("My Big Fat Data file.csv") -> MyData
@
}

这个想法是在工作会话开始时读取数据,这样\togglefalse就不需要再次读取了。我使用的是 Eclipse 和 StatET,因此对象 MyData 将驻留在内存中,并在整个会话期间可供 R 访问。

但是,无论切换值如何,上述代码都会进行评估。

我知道我可以通过改变eval=TRUE来实现这个结果eval=FALSE- 但使用切换会更清晰并提供更多的灵活性。

答案1

我鼓励你尝试一下knitr包裹,它可以更优雅地完成这项工作。请参阅手册中的第 3.5 节“块选项的评估”:https://github.com/downloads/yihui/knitr/knitr-manual.pdf

您的方法有两个问题:

  1. Sweave 不会识别\iftoggle,因为它不分析 TeX 上下文;tex 文档纯粹作为字符串处理——每当它看到时<<>>=,它都会将以下行视为 R 代码,无论您是否有\iftoggle上述代码块;
  2. \iftoggle{FirstTime}{}你可以通过插入代码块来编写更多代码,并且如何用较少的努力来实现这一点knitr

    \documentclass{article}
    
    \begin{document}
    
    <<controller>>=
    # this variable controls if a chunk should be evaluated
    dothis <- TRUE
    @
    
    <<chunk1, eval = dothis>>=
    print('say hello world')
    @
    
    <<chunk2, eval = !dothis>>=
    print('silence is gold')
    @
    
    \end{document}
    

如果你觉得语法很奇怪,你可以阅读knitr与 Sweave有何不同;基本上knitr使您的文档真正具有可编程性。

相关内容