2010-04-28 8 views
6

Quiero tener un documento sweave que incluya un número variable de tablas. Pensé que el ejemplo siguiente funcionaría, pero no es así. Quiero recorrer la lista foo e imprimir cada elemento como si fuera su propia tabla.Cómo incluir varias tablas programáticamente en un documento Sweave usando R

% 
\documentclass[a4paper]{article} 
\usepackage[OT1]{fontenc} 
\usepackage{longtable} 
\usepackage{geometry} 
\usepackage{Sweave} 
\geometry{left=1.25in, right=1.25in, top=1in, bottom=1in} 
\listfiles 
\begin{document} 

<<label=start, echo=FALSE, include=FALSE>>= 
startt<-proc.time()[3] 
library(RODBC) 
library(psych) 
library(xtable) 
library(plyr) 
library(ggplot2) 
options(width=80) 

#Produce some example data, here I'm creating some dummy dataframes and putting them in a list 
foo<-list() 
foo[[1]]<-data.frame(GRP=c(rep("AA",10), rep("Aa",10), rep("aa",10)), X1=rnorm(30), X2=rnorm(30,5,2)) 
foo[[2]]<-data.frame(GRP=c(rep("BB",10), rep("bB",10), rep("BB",10)), X1=rnorm(30), X2=rnorm(30,5,2)) 
foo[[3]]<-data.frame(GRP=c(rep("CC",12), rep("cc",18)), X1=rnorm(30), X2=rnorm(30,5,2)) 
foo[[4]]<-data.frame(GRP=c(rep("DD",10), rep("Dd",10), rep("dd",10)), X1=rnorm(30), X2=rnorm(30,5,2)) 
@ 

\title{Docuemnt to test putting a variable number of tables into a sweave Document} 
\author{"Paul Hurley"} 
\maketitle 

\section{Text} 

This document was created on \today, with \Sexpr{print(version$version.string)} running 
on a \Sexpr{print(version$platform)} platform. It took approx \input{time} sec to process. 

<<label=test, echo=FALSE, results=tex>>= 
cat("Foo") 
@ 
that was a test, so is this 
<<label=table1test, echo=FALSE, results=tex>>= 
print(xtable(foo[[1]])) 
@ 
\newpage 

\subsection{Tables} 

<<label=Tables, echo=FALSE, results=tex>>= 
for(i in seq(foo)){ 
    cat("\n") 
    cat(paste("Table_",i,sep="")) 
    cat("\n") 
    print(xtable(foo[[i]])) 
    cat("\n") 
    } 
#cat("<<label=endofTables>>= ") 
@ 


<<label=bye, include=FALSE, echo=FALSE>>= 
endt<-proc.time()[3] 
elapsedtime<-as.numeric(endt-startt) 
@ 
<<label=elapsed, include=FALSE, echo=FALSE>>= 
fileConn<-file("time.tex", "wt") 
writeLines(as.character(elapsedtime), fileConn) 
close(fileConn) 
@ 

\end{document} 

Aquí, funciona el trozo table1test como se esperaba, y produjo una tabla basada en la trama de datos en foo [[1]], sin embargo, el bucle solamente produce Tabla (subrayado) 1 ....

+0

+1 Bonito ejemplo reproducible. Si miras el documento final de látex, ¿ves las otras tablas? – Shane

Respuesta

6

esto es causado por el subrayado en esta declaración:

cat(paste("Table_",i,sep="")) 

Si lo cambia a

cat(paste("Table ",i,sep="")) 

O

cat(paste("Table\\textunderscore",i,sep="")) 

Funciona. ¿Querías esos números como subíndices?

+0

cara <-palm .... Gracias Shane, pasé dos horas mirando eso y nunca lo vi .... – PaulHurleyuk

Cuestiones relacionadas