我有一个很大的Sweave文件,顶部附近有一个名为“special”的变量。该文件的其余部分是Latex和R,并使用此变量。
如何循环“特殊”的各种值?
有两种可能性:
你能对这些想法发表评论,还是建议更好的想法?
答案 0 :(得分:5)
您能说出您希望文档最终看起来像什么吗?显然,它有重复的结构。在这种情况下,Sweave可能不是最好的工具。您可能希望考虑使用brew
之类的内容。有关其工作原理的示例,请参阅this blog post on the Learning R blog。
答案 1 :(得分:5)
以下是一些可能对新手酿造者有所帮助的信息。
(我今天学习了brew,并用它来创建一本书籍文档,每个“专业”都有一章。)
Shane的链接很有帮助。另一个链接是Brew。这有下载和简短的参考手册(七页)。
至少有一种方式,brew比Sweave更好:
如果您想尝试brew,请在R中执行以下操作:
install.packages("brew")
library(brew)
将以下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}
注意:保存文件时,请将最后一行设为空行,否则brew会向您发出有关未完成行的警告。
在R中,输入
brew("/your/path/to/book.brew", "/where/you/want/brew/to/create/book.tex")
编译Latex文件book.tex。
答案 2 :(得分:2)
我之前使用你的第二个选项完成了这个。我有一个单独的R文件,它将遍历组名,将每个文件分配给组变量(您的specialty
),创建一个Sweave主文件的重命名副本(将组名称粘贴到文件名中),以及然后Sweave那个新文件。你使用“替换”这个词让我犹豫不决 - 我不会尝试任何类型的正则表达式解决方案(也许这不是你想要的)。只需在主脚本(specialty <- specialties[i]
)中分配它就可以了。
这段代码被困在我当前死机的家用电脑上,但我可能会把它放在某个闪存盘上。如果你无法正常工作,请告诉我,我会去挖掘它。
brew
可能也值得研究,虽然我还没有任何个人经验,因此无法与Sweave进行比较。
答案 3 :(得分:0)
有一个解决方案可以让你留在Sweave而不必使用Brew。关键是将在循环中应用的代码转换为具有\newcommand
的Latex宏,然后使用R块循环遍历变量并为每个值发出对Latex宏的调用
https://stat.ethz.ch/pipermail/r-help/2008-June/164783.html提供了一个完整的示例,但这里有一个要点:
\documentclass{article}
\SweaveOpts{echo=FALSE}
\newcommand\digit[2]{%
\section{Digit #1}
Digit #1 of $\pi$ is $#2$.
}
\title{Digits of $\pi$}
\begin{document}
\maketitle
<<results=tex>>=
digits = c(3, 1, 4, 1, 5, 9)
for (i in seq(digits)) {
cat(paste("\\digit{", i, "}{", digits[i], "}\n", sep=""))
}
@
\end{document}