R 関数 tabular() および latex() から生成される表のサイズを制御する

R 関数 tabular() および latex() から生成される表のサイズを制御する

最初に言っておきますが、この質問がクロスバリデーションlatex()またはこのサイト向けです。ただし、ここからコマンドに関する質問をいくつか見てきたのでHmisc、この質問はこのサイトに適していると思います。

私は比較的経験豊富なRユーザーですが、 についてはまだ初心者ですLaTeX。 内で生成された結果セットから大量の 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}

最後の行が何をするのかよくわからないのでコメントアウトしました。ファイルを自分のコンピューターでコンパイルできるようにしました。2:-)ページ目の出力は次のとおりです。

ここに画像の説明を入力してください

本当にテーブル出力だけが必要な場合は、コード チャンクの前に\smallまたはなどと記述することをお勧めします。の関数\footnotesizeだけでこれを行う方法はわかりません。latex()Rmanual詳細については をご覧くださいSweave

いくつかのエディタで.Rnwは、ソースから直接編集してコンパイルすることができます。スタジオ。 私の知る限り、Texmakerも対応可能です。

関連情報