我要預先聲明,我不確定這個問題是否更適合交叉驗證或對於本網站。然而,由於我latex()
從這裡看到了幾個有關該命令的問題Hmisc
,我認為這個問題適合這個網站。
我是一個相對有經驗的R
用戶,但對LaTeX
.我正在嘗試根據 .txt 檔案中生成的一組結果自動建立大量 pdf R
。如果可能的話,我更願意完全在 內建立這些文件R
。經過一番搜索後,我決定透過組合來做到這一點tables
包和latex()
函數來自Hmisc
。
我創建的一些表格非常大,因此當我檢查創建的 pdf 時,表格往往會超出頁面範圍。我想做的是使用該latex()
命令或tabular()
其中的命令R
來縮小生成的 pdf 中顯示的表格的大小。該latex
函數有一個“ size
”參數,但指定size = "small"
似乎不適用於透過呼叫產生的表tabular()
。有人有建議嗎?
下面可以找到一些範例程式碼。
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")
編輯:根據要求,下面是從呼叫latex(tab, "")
.正如我上面提到的,我想要做的不僅僅是手動修改函數生成的 LaTeX latex()
,而是確保從呼叫生成的 LaTeX 程式碼latex()
產生一個更小的表。
\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}
答案1
由於您正在使用tables
包R
,因此您必須使用Sweave
.這是一個.Rnw
可能適合您的文件。我沒有那麼多背景R
。我只是用它來進行一些基本的統計計算。所以如果我不能給你一個明確的答案,我很抱歉你是否可以使用latex()
。如果這是您唯一的選擇,我建議您詢問交叉驗證。
將其另存為foobar.Rnw
並將其放入您的工作目錄中。現在,在 R 中,使用setwd()
(如果尚未設定)設定您的工作目錄。現在,運行
Sweave("foobar.Rnw")
如果你成功做到了這一點,你應該會看到
You can now run (pdf)latex on ‘tableprosweave.tex’
在最後。
現在,在您的工作目錄中,foobar.tex
使用您最喜歡的 TeX 編輯器開啟並運行pdflatex
或直接運行
pdflatex foobar
在你的終端機/命令列中。
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}
我已經註解掉了最後幾行,因為我真的不知道它們的作用以及如何讓文件在我的計算機中編譯:-)
這是第二頁輸出。
如果您確實在表輸出之後,我建議您在程式碼區塊之前編寫\small
or等。\footnotesize
同樣,我不知道如何僅使用latex()
的功能來做到這一點R
。看manual
有關 的更多資訊Sweave
。