如何在由 Hmisc::latex() 创建的表中添加水平线?

如何在由 Hmisc::latex() 创建的表中添加水平线?

假设我们在 R 中有一个表,并使用 R 包 Hmisc 中的函数 latex() 将该表包含在 Sweave(或 knitr)文档中。我的问题是:

有没有办法添加水平线之内桌子?

谢谢!

编辑:我的意思是一些选项,例如 \cmidrule 或某些东西被添加到 latex() 的 latex 输出中

你好,迈克尔

答案1

您可以使用n.rgroup对行进行分组;默认是添加水平线。\cmidrule虽然我还没有尝试过将行和列组合在一起,但我认为没有简单的添加方法。此外,n.rgroup在水平线后会产生一条空白行。我也不确定如何消除它。

\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(100, 200, 300, 400,3.145,2.718,
20, 100, 10000, 10000,400,1700.42), 4)
@
<<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"),n.rgroup=c(2,2))
@

\end{document}

在此处输入图片描述

答案2

我刚刚找到了一种解决方法,可以摆脱由引入的额外空白行n.rgroup。下面我从Alan Munn 的回答并将latex(...)部分内容附如下(正如 BondedDust 所建议的这个答案另一个问题):

out <- sub("&&\\\\tabularnewline", "", capture.output(
latex(...)
)) 

然后添加writeLines(out)后打印的表格没有多余的空白行。

基于 Alan Munn 和 BondedDust 答案的最小工作示例(我使用 knitr 并删除了 Alan Munn 的一些 sweave 包/规范。您可能需要重新插入它们,并且可能还需要更改块选项):

\documentclass{report}
\usepackage{siunitx,booktabs}

\begin{document}

<<echo=FALSE,results='asis', message=FALSE>>=
library("Hmisc")
dat <-  matrix(c(100, 200, 300, 400,3.145,2.718,
20, 100, 10000, 10000,400,1700.42), 4)

out <- sub("&&\\\\tabularnewline", "", capture.output( 
latex(dat,table=FALSE,center='centering',file='',
  booktabs=T,numeric.dollar=FALSE,colheads=c("Col A","Col B","Col C"),
      colnamesTexCmd="bfseries", col.just=c("S","S","S"),n.rgroup=c(2,2))
))
writeLines(out)
@

\end{document}

在此处输入图片描述

进一步阐述:为了找出应该输入什么来代替问号,sub("???", "", capture.output(...我在 R(不是 knitr)中运行了以下代码:

library("Hmisc")
dat <-  matrix(c(100, 200, 300, 400,3.145,2.718,
                 20, 100, 10000, 10000,400,1700.42), 4)

capture.output( 
  latex(dat,table=FALSE,center='centering',file='',
        booktabs=T,numeric.dollar=FALSE,colheads=c("Col A","Col B","Col C"),
        colnamesTexCmd="bfseries", col.just=c("S","S","S"),n.rgroup=c(2,2))
)

控制台输出中的其中一行:

[11] "&&\\tabularnewline"    

这就是导致出现多条白线的原因。再添加 2 个反斜杠来转义每个反斜杠会导致出现"&&\\\\tabularnewline",这就是我需要输入的内容,而不是问号。

相关内容