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 R
Benutzer, 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 austables
Paket 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 latex
Funktion 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
tables
Da Sie das Paket von verwenden R
, müssen Sie auch verwenden Sweave
. Hier ist eine .Rnw
Datei, 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.Rnw
und 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.tex
Ihren bevorzugten TeX-Editor und führen Sie ihn aus pdflatex
oder 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.
Wenn Sie wirklich nur an der Tabellenausgabe interessiert sind, schlage ich vor, dass Sie vor dem Codeblock einfach \small
oder \footnotesize
usw. schreiben. Auch hier weiß ich nicht, wie ich das nur mit der latex()
Funktion von machen soll R
. Siehemanual
für weitere Informationen zu Sweave
.
Einige Editoren erfordern das Bearbeiten und Kompilieren.Rnw
direkt aus dem Quellcode, wie zum BeispielRstudio. SO VIEL ICH WEISS,Texmaker
kann auch damit umgehen.