Steuern der Größe von Tabellen, die von den R-Funktionen tabular() und latex() erstellt werden

Steuern der Größe von Tabellen, die von den R-Funktionen tabular() und latex() erstellt werden

Ich sage gleich vorweg, dass ich nicht ganz sicher bin, ob diese Frage besser geeignet ist fürKreuzvalidiertlatex()oder für diese Site. Da ich jedoch mehrere Fragen zu dem Befehl von hier gesehen habe Hmisc, denke ich, dass diese Frage für diese Site geeignet ist.

Ich bin ein relativ erfahrener RBenutzer, aber ziemlich neu bei LaTeX. Ich versuche, automatisch eine große Anzahl von PDFs aus einer Reihe von Ergebnissen zu erstellen, die in generiert wurden R. Ich würde diese Dateien R, wenn möglich, lieber vollständig in erstellen. Nach einigem Suchen habe ich beschlossen, dies durch eine Kombination austablesPaket und die latex()Funktion vonHmisc.

Einige der Tabellen, die ich erstelle, sind ziemlich groß, und wenn ich mir die von mir erstellten PDFs ansehe, neigen die Tabellen dazu, über die Seite hinauszulaufen. Ich möchte entweder den latex()Befehl oder den tabular()darin enthaltenen Befehl verwenden R, um die Größe der Tabellen zu verkleinern, die in meinen resultierenden PDFs erscheinen. Die latexFunktion hat ein „ size“-Argument, aber die Angabe size = "small"scheint bei Tabellen, die durch Aufrufe von generiert wurden, nicht zu funktionieren tabular(). Hat jemand einen Rat?

Unten finden Sie einige Beispielcodes.

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")

Bearbeiten: Wie gewünscht ist unten der Code, der durch einen Aufruf von erhalten wurde latex(tab, ""). Wie ich oben erwähnt habe, möchte ich nicht nur das von der latex()Funktion erzeugte LaTeX manuell ändern, sondern sicherstellen, dass der durch den Aufruf von generierte LaTeX-Code latex()eine kleinere Tabelle erzeugt.

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

Antwort1

tablesDa Sie das Paket von verwenden R, müssen Sie auch verwenden Sweave. Hier ist eine .RnwDatei, die für Sie funktionieren könnte. Ich habe nicht so viel Erfahrung mit R. Ich verwende es nur für einige grundlegende statistische Berechnungen. Es tut mir also leid, wenn ich Ihnen keine eindeutige Antwort geben kann, ob Sie die Größe der Tabelle mit demlatex() . Wenn das Ihre einzige Option wäre, würde ich vorschlagen, in zu fragenKreuzvalidiert.

Speichern Sie dies unter foobar.Rnwund legen Sie es in Ihrem Arbeitsverzeichnis ab. Legen Sie nun in R Ihr Arbeitsverzeichnis fest setwd()(falls Sie dies noch nicht getan haben). Führen Sie nun Folgendes aus:

Sweave("foobar.Rnw")

Wenn Sie damit erfolgreich sind, sollten Sie sehen

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

Am Ende.

Öffnen Sie nun in Ihrem Arbeitsverzeichnis foobar.texIhren bevorzugten TeX-Editor und führen Sie ihn aus pdflatexoder führen Sie einfach aus

pdflatex foobar

in Ihrem Terminal/Ihrer Befehlszeile.

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}

Ich habe die letzten Zeilen auskommentiert, da ich wirklich nicht weiß, was sie tun, und um die Datei auf meinem Computer zu kompilieren. :-)Hier ist die Ausgabe der zweiten Seite.

Bildbeschreibung hier eingeben

Wenn Sie wirklich nur an der Tabellenausgabe interessiert sind, schlage ich vor, dass Sie vor dem Codeblock einfach \smalloder \footnotesizeusw. schreiben. Auch hier weiß ich nicht, wie ich das nur mit der latex()Funktion von machen soll R. Siehemanualfür weitere Informationen zu Sweave.

Einige Editoren erfordern das Bearbeiten und Kompilieren.Rnw direkt aus dem Quellcode, wie zum BeispielRstudio. SO VIEL ICH WEISS,Texmakerkann auch damit umgehen.

verwandte Informationen