はじめに
Rで数値実験を行い、それをTexにまとめるときみんなどうしてるんだろうか
- 1つずつ入力
- RのTex出力系パッケージを使う
自分は1で1つずつ入力していたのだが、そろそろきつくなってきた。しかし、Texに詳しいわけでもなく、ましてやRのTex出力系ライブラリにも詳しくない(日本語記事もあまりなく)ので、最低限出力できて少し自動化すればいいやと思ったので、そのやり方を共有
はっきり言って自分だけしか使えないと思うので、Tipsでもなんでもなくただのメモ
パッケージ
自分はHmisc
パッケージを使う。基本の解説はこちらにあるとおり
使い方
install.packages("Hmisc")
library(Hmisc)
自分のよくあるケース
- パラメータ1(P=1)、パラメータ2(P=2)… のときに、それぞれのモデルの精度の平均と標準偏差を出力したい
- 3ケタ表示で
- 平均 ± 標準偏差
- 標準偏差は文字を小さく(というか、 _ で)
データ
# 値はこの例ではランダムで
vec.mean1 <- runif(6, 0.5, 1.0) %>% sprintf("%.3f", .)
vec.sd1 <- runif(6, 0.01, 0.1) %>% sprintf("%.3f", .)
vec.mean2 <- runif(6, 0.5, 1.0) %>% sprintf("%.3f", .)
vec.sd2 <- runif(6, 0.01, 0.1) %>% sprintf("%.3f", .)
vec.mean3 <- runif(6, 0.5, 1.0) %>% sprintf("%.3f", .)
vec.sd3 <- runif(6, 0.01, 0.1) %>% sprintf("%.3f", .)
# データフレーム作成
df <- data.frame(P1 = paste0("$",vec.mean1,"_{¥pm ",vec.sd1,"}$"),
P2= paste0("$",vec.mean2,"_{¥pm ",vec.sd2,"}$"),
P3 = paste0("$",vec.mean3,"_{¥pm ",vec.sd3,"}$")
)
# 行名
rownames(df) <- c("model1", "model2", "model3", "model4", "model5", "model6")
表示
latex(
df, # 配列型のデータ
file="", # LaTeX ファイルの保存先
title="Model", # 1行1列目のセルの内容
label="table1", # LaTeX の \label に相当
caption="table1の結果" # LaTeX の \caption に相当
)
すると、以下のように出力される
%latex.default(df, file = "", title = "Model", label = "table1", caption = "table1の結果")%
\begin{table}[!tbp]
\caption{table1の結果\label{table1}}
\begin{center}
\begin{tabular}{llll}
\hline\hline
\multicolumn{1}{l}{Model}&\multicolumn{1}{c}{P1}&\multicolumn{1}{c}{P2}&\multicolumn{1}{c}{P3}\tabularnewline
\hline
model1&$0.570_{¥pm 0.089}$&$0.608_{¥pm 0.019}$&$0.651_{¥pm 0.015}$\tabularnewline
model2&$0.824_{¥pm 0.097}$&$0.525_{¥pm 0.067}$&$0.626_{¥pm 0.066}$\tabularnewline
model3&$0.724_{¥pm 0.077}$&$0.789_{¥pm 0.100}$&$0.921_{¥pm 0.036}$\tabularnewline
model4&$0.973_{¥pm 0.027}$&$0.848_{¥pm 0.021}$&$0.807_{¥pm 0.055}$\tabularnewline
model5&$0.999_{¥pm 0.026}$&$0.761_{¥pm 0.061}$&$0.804_{¥pm 0.028}$\tabularnewline
model6&$0.574_{¥pm 0.097}$&$0.792_{¥pm 0.037}$&$0.524_{¥pm 0.074}$\tabularnewline
\hline
\end{tabular}\end{center}
\end{table}
つまり、以下のようにTexで表示される
おわりに
- 実際は、これの
model1 〜 model6
の行をコピペして貼り付けてる - latex関数でもっとできるんだろうけど、使い方がいまいちわからない。。(ドキュメント読めというのは置いておいて)楽したいので一旦これで。
- みんなはどのようにRでの数値結果(data.frame)をTexに落とし込んでいるのかなー?