2012-02-02 4 views
3

要素の数があらかじめ定義されていないSweaveからLaTeX文書を生成することは可能ですか?つまり、データフレームの各行にテーブルを作成する必要があるとします。ドキュメント内のテーブルの数は、データフレームの行数によって異なります。Dynamic Sweave文書

つまり、forループ内にLaTeX要素を生成します。各行について、Sweaveはテーブルを作成します。

ページやその他の要素にも同じことが適用されます。これは可能ですか?

+1

brew'は、[このブログ](http://learnr.wordpress.com/2009/09/09/brew-creating-repetitive-reports/)に記述されている '使用して素敵なチュートリアル – baptiste

+0

はい、私は私の場合は、brewを使ってtexファイルを生成するのが最善の方法だと考えています。こうすることで、for、if、その他の制御構造を使ってtexファイルを動的に生成することができます。 –

答えて

2

は、このヘルプを行います。

\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} 

これは正しい軌道にある場合は、より詳細に入るもラクラク!

+0

@Ramnathとしてmtcarsを使って編集したもの(手作りのものよりもはるかに優れています)は[こちら](ftp://godesberg.homelinux.net/test.Rnw)です。私は、明らかに長い道のりに付随する柔軟性を実証しようと試みました。 – vaettchen

0

これを行うには、これより短い方法があります。私はRmtcarsデータセットを使用しており、シリンダー数でテーブルを作成する方法を説明します。 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}