
我正在使用 Hmisc 包的“latex”函数基于 R 中的矩阵创建 LaTeX 表。
dat = matrix(c(1000, 100, 10000, 10000), 2)
latex(dat, file='')
这完美地(如预期)运行。
另外我想使用
prettyNum(dat, '.')
以更易读的方式格式化数字。例如:
100 --> 100
1000 --> 1.000
有没有一种简单的方法可以组合这些功能而不会破坏(自动!)表格对齐('r'表示数字而不是'l'表示字符)?
答案1
更新
该Hmisc
软件包已更新,现在允许任意列规范。请参阅 Boris 的答案以获得简单的解决方案。
原始答案
大多数 R 包生成表格的方式存在一个问题,那就是它们不容易适应 LaTeX 中不断变化的功能。漂亮打印数字和表格的标准在 LaTeX 中是不支持siunitx
的包Hmisc
。如果您使用 Sweave 生成表格,则没有简单的方法可以解决这个问题,除非您对结果.tex
文件进行后期编辑。
Hmisc
但是,如果您愿意这样做,那么用生成表然后用定义的列类型替换其r
列并不是那么困难。S
siunitx
以下是一个例子:
.Rnw 文件
\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage{siunitx,booktabs}
\sisetup{group-separator={.},group-minimum-digits={3},output-decimal-marker={,}}
\usepackage[noae]{Sweave}
\begin{document}
<<>>=
library("Hmisc")
dat <- matrix(c(1000, 100, 10000, 10000,3.145,1700.42), 2)
@
<<echo=false,results=tex>>=
latex(dat,table=F,center='centering',file='',
booktabs=T,numeric.dollar=F,colheads=c("Col A","Col B","Col C"),colnamesTexCmd="bfseries")
@
\end{document}
输出 .tex 文件
当您用 Sweave 保存此文件时,将生成.tex
包含以下行的文件:
\begin{tabular}{rrr}
如果您手动将其更改为:
\begin{tabular}{SSS}
最终.tex
文件如下所示:
\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage{siunitx,booktabs}
\sisetup{group-separator={.},group-minimum-digits={3},output-decimal-marker={,}}
\usepackage[noae]{Sweave}
\begin{document}
\begin{Schunk}
\begin{Sinput}
> library("Hmisc")
> dat <- matrix(c(1000, 100, 10000, 10000,3.145,1700.42), 2)
\end{Sinput}
\end{Schunk}
% latex.default(dat, table = F, center = "centering", file = "", booktabs = T, numeric.dollar = F, colheads = c("Col A", "Col B", "Col C"), colnamesTexCmd = "bfseries")
%
\centering
\begin{tabular}{SSS}
\toprule
\multicolumn{1}{c}{\bfseries Col A}&\multicolumn{1}{c}{\bfseries Col B}&\multicolumn{1}{c}{\bfseries Col C}\tabularnewline
\midrule
1000&10000& 3.145\tabularnewline
100&10000&1700.420\tabularnewline
\bottomrule
\end{tabular}
\end{document}
现在siunitx
就可以发挥它的魔力了,输出如下:
答案2
其实新版的Hmisc已经有了这个参数col.just
,所以不需要再编辑tex文件了
\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage{siunitx,booktabs}
\sisetup{group-separator={.},group-minimum-digits={3},
output-decimal-marker={,}}
\usepackage[noae]{Sweave}
\begin{document}
<<>>=
library("Hmisc")
dat <- matrix(c(1000, 100, 10000, 10000,3.145,1700.42), 2)
@
<<echo=false,results=tex>>=
latex(dat,table=F,center='centering',file='',
booktabs=T,numeric.dollar=F,colheads=c("Col A","Col B","Col C"),
colnamesTexCmd="bfseries", col.just=c("S","S","S"))
@
\end{document}