R、Sweave、Hmisc:漂亮的打印数字

R、Sweave、Hmisc:漂亮的打印数字

我正在使用 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列并不是那么困难。Ssiunitx

以下是一个例子:

.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就可以发挥它的魔力了,输出如下:

修改后的 tex 文件的输出

答案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}

在此处输入图片描述

相关内容