抑制 table 中的 Hmisc latex() 水平线 (\midrule) 输出

Suppress Hmisc latex() horizontal lines (\midrule) output in a table

我正在使用 R 中的 Hmisc 包来生成可重现的 LaTex table 并希望抑制默认生成的一些水平线 (\midrule)书签模式。我已经在此处和 tex.stackexchange 上筛选了 Hmisc 文档以及许多 Hmisc 解决方案,但我认为还没有人回答过类似的问题(但如果我错了请纠正我)。

这是一个应该可以重现的最小示例:

library(Hmisc)    
myDF <- data.frame("foo" = c(1:10),
                       "bar" = rep(c("a","b"),5),
                       "baz" = c(21:30))

latex(myDF,
      file="",
      rowname = "",
      rowlabel = "",
      rgroup = c("Group A", "Group B", "Group C"),
      n.rgroup = c(3, 4, 3),
      booktabs = TRUE
      )

生成以下输出:

 %latex.default(myDF, file = "", rowname = "", rowlabel = "", rgroup = c("Group A",     "Group B", "Group C"), n.rgroup = c(3, 4, 3), booktabs = TRUE,     )%
\begin{table}[!tbp]
\begin{center}
\begin{tabular}{lrlr}
\toprule
\multicolumn{1}{l}{}&\multicolumn{1}{c}{foo}&\multicolumn{1}{c}{bar}&\multicolumn{1}{c}{baz}\tabularnewline
\midrule
{\bfseries Group A}&&&\tabularnewline
~~&$ 1$&a&$\tabularnewline
~~&$ 2$&b&$\tabularnewline
~~&$ 3$&a&$\tabularnewline
\midrule
{\bfseries Group B}&&&\tabularnewline
~~&$ 4$&b&$\tabularnewline
~~&$ 5$&a&$\tabularnewline
~~&$ 6$&b&$\tabularnewline
~~&$ 7$&a&$\tabularnewline
\midrule
{\bfseries Group C}&&&\tabularnewline
~~&$ 8$&b&$\tabularnewline
~~&$ 9$&a&$\tabularnewline
~~&$&b&$\tabularnewline
\bottomrule
\end{tabular}\end{center}
\end{table}

如何在输出中抑制部分或全部 '\midrule' 的出现?

请注意,虽然我不打算用 Hmisc 解决这个问题,但我有一些限制,rgroup 标志可以非常有效地解决这些问题。虽然我不相信 xtablestargazer(例如)提供可用的替代方案,但我当然愿意接受其他包,只要我可以保留示例中提供的带有行分组的布局。

我处理 Hmisc::latex 的方法是尽可能接近它,捕获结果,用正则表达式修复它,然后打印。在这里使用正则表达式让我感到有点内疚,因为我怀疑有专门的方法来做这些事情,但经过几个小时的搜索我不再关心了。

在 RMarkdown 中,

---
title: "Table without midrules"
author: "Edward Visel"
date: "12/3/2016"
header-includes:
   - \usepackage{booktabs}
output: pdf_document
---


```{r table, message=FALSE, results='asis'}
library(Hmisc)    
myDF <- data.frame("foo" = c(1:10),
                       "bar" = rep(c("a","b"),5),
                       "baz" = c(21:30))

tb <- capture.output(latex(myDF,
      file="",
      rowname = "",
      rowlabel = "",
      rgroup = c("Group A", "Group B", "Group C"),
      n.rgroup = c(3, 4, 3),
      booktabs = TRUE, 
      where = '!htbp'    # so table prints in correct location
      ))[-1]    # so LaTeX comment at beginning doesn't print

cat(grep('\midrule', tb, value = TRUE, invert = TRUE))    # use gsub if you prefer
```