有没有可能通过Sweave生成一个没有预定义元素数量的LaTeX文档?我的意思是,假设我需要为数据帧中的每一行构建一个表。文档中的表数将取决于数据帧中的行数。
换句话说,在for循环中生成LaTeX元素。对于每一行,Sweave将构建一个表。
这同样适用于页面或其他元素。有可能做到这一点吗?
发布于 2012-02-02 20:20:44
这是否有帮助:
\documentclass[a4paper,12pt]{article}
\usepackage{Sweave}
\begin{document}
<<echo=FALSE>>=
library( xtable )
df <- structure(list(ID = 2:6, home_pc = structure(c(2L, 6L, 1L, 3L,
5L), .Label = c("BY5 8IB", "CB4 2DT", "DH4 6PB", "KN4 5GH", "MP9 7GH",
"NE5 7TH", "VB2 4RF"), class = "factor"), start_pc = structure(c(4L,
3L, 4L, 2L, 1L), .Label = c("BV6 5PB", "CB3 5TH", "FC5 7YH",
"Home", "NA"), class = "factor"), end_pc = structure(c(1L, 3L,
3L, 3L, 2L), .Label = c("CB5 4FG", "GH6 8HG", "Home", "NA"), class = "factor")), .Names = c("ID",
"home_pc", "start_pc", "end_pc"), row.names = 2:6, class = "data.frame")
count = 1
end = 3
@
<<fun,echo=FALSE,eval=FALSE>>=
print( xtable( df ) )
@
<<echo=FALSE,results=tex>>=
for( i in 1:end )
{
print( xtable( df ) )
i <- i + 1
}
cat( "\\newpage" )
@
<<echo=FALSE,results=tex>>=
if( count < end )
<<fun>>
count = count + 1
cat( "\\newpage" )
@
<<echo=FALSE,results=tex>>=
if( count < end )
<<fun>>
count = count + 1
cat( "\\newpage" )
@
<<echo=FALSE,results=tex>>=
if( count < end )
<<fun>>
count = count + 1
cat( "\\newpage" )
@
\end{document}如果这是正确的路线,我很乐意深入了解更多细节!
发布于 2012-02-03 00:53:07
这里有一个更简单的方法来做同样的事情。我将使用R中的mtcars数据集,并将演示如何按柱面数量创建表。您可以使用Sweave或knitr (这是块中的新成员)处理此文档。让我知道它是如何工作的。
\documentclass{article}
%\SweaveOpts{echo = F}
\begin{document}
<<load-libraries>>=
suppressMessages(require(plyr))
suppressMessages(require(xtable))
@
<<gen-tables, results = tex>>=
d_ply(mtcars, .(cyl), xtable, .print = TRUE)
@
\end{document}https://stackoverflow.com/questions/9111216
复制相似问题