你如何在Sweave中循环遍历全局变量

Win*_*ang 4 r sweave

我有一个很大的Sweave文件,顶部附近有一个名为"special"的变量.该文件的其余部分是Latex和R,并使用此变量.

如何循环"特殊"的各种值?

两种可能性是:

  1. 使文件成为一个大循环(并将Latex部分转换为R).
  2. 编写一个复制Sweave文件的脚本,替换"special"的值,并在每个副本上运行Sweave.

你能评论一下这些想法,还是建议更好的想法?

Sha*_*ane 5

你能说出你希望你的文档最终看起来像什么吗?显然,它有重复的结构.在这种情况下,Sweave可能不是最好的工具.你可能想要考虑使用类似的东西brew.请参阅Learning R博客上的此博客文章,了解其工作原理.


Win*_*ang 5

以下是一些可能对新手酿造者有所帮助的信息.

(我今天学到了关于brew的知识,并用它来创建一本书籍文档,每个"专业"都有一章.)

Shane的链接很有帮助.另一个链接是Brew.这有下载和简短的参考手册(七页).

至少在某种程度上,brew比Sweave更好:

  • 在brew中,标签更简单,是<%...%>的变体.
  • 在Sweave中,标签是<< ... >> = ... @和\ Sexpr {...}.

如果您想尝试brew,请在R中执行以下操作:

install.packages("brew")
library(brew)
Run Code Online (Sandbox Code Playgroud)

将以下brew代码保存在名为的文件中book.brew.代码打印pi的一些数字,每章一个数字.请注意,有一个循环,它的一部分在Latex中,而它的一部分在brew标签中.

   \documentclass{book}
    \title{A book}
    \begin{document}
    \maketitle
    <%# This comment will not appear in the Latex file. %>
    <%
    digits = c(3, 1, 4, 1, 5, 9)
    for (i in 1:length(digits))
    {
    %>
    \chapter{Digit $<%= i %>$}
    Digit $<%= i %>$ of $\pi$ is $<%= digits[i] %>$.
    <%
    }
    %>
    \end{document}
Run Code Online (Sandbox Code Playgroud)

注意:保存文件时,将最后一行设为空行,否则brew会向您发出有关未完成行的警告.

在R中,键入

brew("/your/path/to/book.brew", "/where/you/want/brew/to/create/book.tex")
Run Code Online (Sandbox Code Playgroud)

编译Latex文件book.tex.