Controlar el tamaño de las tablas producidas a partir de las funciones R tabular() y latex()

Controlar el tamaño de las tablas producidas a partir de las funciones R tabular() y latex()

Diré desde el principio que no estoy absolutamente seguro de si esta pregunta es más apropiada paraValidación cruzadao para este sitio. Sin embargo, dado que he visto varias preguntas sobre el latex()comando desde Hmiscaquí, creo que esta pregunta es adecuada para este sitio.

Soy un Rusuario relativamente experimentado pero bastante nuevo en LaTeX. Estoy intentando crear automáticamente una gran cantidad de archivos PDF a partir de un conjunto de resultados generados en R. Preferiría crear estos archivos completamente dentro de R, si es posible. Después de buscar un poco, decidí hacer esto mediante una combinación detablespaquete y la latex()función deHmisc.

Algunas de las tablas que estoy creando son bastante grandes, por lo que cuando examino los archivos PDF que he creado, las tablas tienden a salirse de la página. Lo que me gustaría hacer es usar el latex()comando o el tabular()comando interno Rpara reducir el tamaño de las tablas que aparecen en mis archivos PDF resultantes. La latexfunción tiene un sizeargumento " ", pero la especificación size = "small"no parece funcionar con tablas generadas por llamadas a tabular(). ¿Alguien tiene algún consejo?

Algunos códigos de muestra se pueden encontrar a continuación.

require(tables)
require(Hmisc)

# Create sample data
Condition <- factor(rep(c("Control", "Experimental"), 150))
Time <- factor(rep(c("Baseline", "Baseline", "Three days", "Three days", 
   "Three weeks", "Three weeks"), 50))
var1 <- rnorm(300)
var2 <- rnorm(300)
var3 <- rnorm(300)
var4 <- rnorm(300)
var5 <- rnorm(300)
var6 <- rnorm(300)

# Add to data frame, sprinkle in missing values
d <- data.frame(Condition, Time, var1, var2, var3, var4, var5, var6)
d[sample(1:300, 30), c("var1", "var2", "var3", "var4")] <- NA
d[sample(1:300, 20), c("var5", "var6")] <- NA

# Create helper functions
mean.narm <- function(x) mean(x, na.rm = TRUE)
sd.narm <- function(x) sd(x, na.rm = TRUE)
count.obs <- function(x) sum(!is.na(x))
# Use tabular() from tables
tab <- tabular((Heading("Variable 1") * var1 + Heading("Variable 2") * var2 + 
   Heading("Variable 3") * var3 + Heading("Variable 4") * var4 + Heading("Variable 5") * var5 + 
   Heading("Variable 6") * var6) * Time ~ Condition * ((N=count.obs) + (Mean=mean.narm) + (SD=sd.narm)),
           data = d)

# Ensure that pdflatex is used when I call latex(), below
options(latexcmd = "pdflatex")
options(dviExtension = "pdf")
options(xdvicmd = "C:/PROGRA~1/R/R-215~1.3/bin/i386/open.exe")
# Use the latex() function
latex(tab, "table1.tex")

Editar: según lo solicitado, a continuación se muestra el código obtenido de una llamada a latex(tab, ""). Como mencioné anteriormente, lo que quiero hacer no es simplemente modificar manualmente el LaTeX producido por la latex()función, sino asegurarme de que el código LaTeX generado a partir de la llamada latex()produzca una tabla más pequeña.

\begin{tabular}{llcccccc}
\hline
& & \multicolumn{6}{c}{Condition} \\ 
& & \multicolumn{3}{c}{Control} & \multicolumn{3}{c}{Experimental} \\ 
 & Time & N & Mean & SD & N & Mean & \multicolumn{1}{c}{SD} \\ 
\hline
Variable 1 & Baseline  & $42$ & $\phantom{-}0.029831$ & $1.0657$ & $46$ & $\phantom{-}0.0067612$ & $1.0687$ \\
 & Three days  & $44$ & $\phantom{-}0.109871$ & $1.0161$ & $43$ & $-0.1633312$ & $1.1552$ \\
 & Three weeks  & $47$ & $\phantom{-}0.160282$ & $1.0613$ & $48$ & $\phantom{-}0.1055877$ & $0.9537$ \\
Variable 2 & Baseline  & $42$ & $-0.166005$ & $1.1078$ & $46$ & $\phantom{-}0.0012202$ & $0.9659$ \\
 & Three days  & $44$ & $-0.205125$ & $0.9315$ & $43$ & $-0.2294237$ & $1.0693$ \\
 & Three weeks  & $47$ & $-0.164718$ & $1.0122$ & $48$ & $-0.0769583$ & $1.0418$ \\
Variable 3 & Baseline  & $42$ & $\phantom{-}0.077019$ & $1.0643$ & $46$ & $\phantom{-}0.0798812$ & $1.0396$ \\
 & Three days  & $44$ & $-0.282688$ & $0.9023$ & $43$ & $\phantom{-}0.1299074$ & $0.9916$ \\
 & Three weeks  & $47$ & $-0.291495$ & $1.0138$ & $48$ & $-0.0240293$ & $1.0309$ \\
Variable 4 & Baseline  & $42$ & $-0.247300$ & $1.0963$ & $46$ & $-0.0409480$ & $1.0901$ \\
 & Three days  & $44$ & $-0.158524$ & $1.0995$ & $43$ & $\phantom{-}0.1486800$ & $0.8722$ \\
 & Three weeks  & $47$ & $-0.149038$ & $0.8798$ & $48$ & $-0.0002842$ & $0.9750$ \\
Variable 5 & Baseline  & $49$ & $\phantom{-}0.008081$ & $0.8102$ & $47$ & $-0.3131353$ & $1.0592$ \\
 & Three days  & $45$ & $-0.241864$ & $1.0037$ & $45$ & $\phantom{-}0.1130470$ & $0.8106$ \\
 & Three weeks  & $44$ & $-0.177473$ & $1.0706$ & $50$ & $-0.0264635$ & $0.7805$ \\
Variable 6 & Baseline  & $49$ & $\phantom{-}0.013659$ & $1.0833$ & $47$ & $-0.0967571$ & $1.0676$ \\
 & Three days  & $45$ & $\phantom{-}0.098045$ & $0.9842$ & $45$ & $\phantom{-}0.0756736$ & $0.9613$ \\
 & Three weeks  & $44$ & $-0.152400$ & $1.0654$ & $50$ & $-0.2145893$ & $1.0157$ \\
\hline 
\end{tabular}

Respuesta1

Dado que está utilizando tablesel paquete de R, debe utilizar Sweave. Aquí tienes un .Rnwarchivo que podría funcionar para ti. No tengo mucha experiencia con R. Solo lo uso para algunos cálculos estadísticos básicos. Así que lo siento si no puedo darle una respuesta definitiva sobre si puede configurar el tamaño de la tabla usando ellatex() comando. Si esa fuera su única opción, sugeriría preguntar enValidación cruzada.

Guarde esto como foobar.Rnwy colóquelo en su directorio de trabajo. Ahora, en R, configure su directorio de trabajo usando setwd()(si aún no lo ha hecho). ahora corre

Sweave("foobar.Rnw")

Si tiene éxito al hacer esto, debería ver

You can now run (pdf)latex on ‘tableprosweave.tex’

al final.

Ahora, en su directorio de trabajo, abra foobar.texcon su editor TeX favorito y ejecute pdflatexo simplemente ejecute

pdflatex foobar

en su terminal/línea de comando.

foobar.Rnw:

\documentclass{article}

\usepackage{Sweave}
\usepackage{booktabs}

\begin{document}
\SweaveOpts{concordance=TRUE, keep.source=TRUE}
<<echo=false>>=
options(width=60)
@

<<>>=
require(tables)
require(Hmisc)

booktabs() % To use booktabs formatting

# Create sample data
Condition <- factor(rep(c("Control", "Experimental"), 150))
Time <- factor(rep(c("Baseline", "Baseline", "Three days", "Three days", 
   "Three weeks", "Three weeks"), 50))
var1 <- rnorm(300)
var2 <- rnorm(300)
var3 <- rnorm(300)
var4 <- rnorm(300)
var5 <- rnorm(300)
var6 <- rnorm(300)

# Add to data frame, sprinkle in missing values
d <- data.frame(Condition, Time, var1, var2, var3, var4, var5, var6)
d[sample(1:300, 30), c("var1", "var2", "var3", "var4")] <- NA
d[sample(1:300, 20), c("var5", "var6")] <- NA

# Create helper functions
mean.narm <- function(x) mean(x, na.rm = TRUE)
sd.narm <- function(x) sd(x, na.rm = TRUE)
count.obs <- function(x) sum(!is.na(x))
# Use tabular() from tables

tab <- tabular((Heading("Variable 1") * var1 + Heading("Variable 2") * var2 + 
   Heading("Variable 3") * var3 + Heading("Variable 4") * var4 + Heading("Variable 5") * var5 + 
   Heading("Variable 6") * var6) * Time ~ Condition * ((N=count.obs) + (Mean=mean.narm) + (SD=sd.narm)),
           data = d)
@

\newpage

% Here, \small was written just before the code chunk.

\begin{center}
\small
<<results=tex,echo=FALSE>>=
latex(
tab
)
@
\end{center}

\vfill

% Here, \scriptsize was written just before the code chunk.

\begin{center}
\scriptsize
<<results=tex,echo=FALSE>>=
latex(
tab
)
@
\end{center}

%<<>>=
%# Ensure that pdflatex is used when I call latex(), below
%options(latexcmd = "pdflatex")
%options(dviExtension = "pdf")
%options(xdvicmd = "C:/PROGRA~1/R/R-215~1.3/bin/i386/open.exe")
%# Use the latex() function
%#latex(tab, file="table1.tex")
%@

\end{document}

He comentado las últimas líneas porque realmente no sé qué hacen y cómo compilar el archivo en mi computadora. :-)Aquí está el resultado de la segunda página.

ingrese la descripción de la imagen aquí

Si realmente está justo después del resultado de la tabla, le sugiero que simplemente escriba \smallo \footnotesize, etc., antes del fragmento de código. Nuevamente, no sé cómo hacer esto solo con la latex()función de R. Vermanualpara más información sobre Sweave.

Algunos editores te obligan a editar y compilar .Rnwdirectamente desde la fuente, comoRstudio. HASTA DONDE SE,TexmakerTambién puedo manejarlo.

información relacionada