0

Rのパッケージを使用して再現可能な LaTex テーブルを生成していますが、booktabs モードでデフォルトで生成されるHmisc水平線 ( ) の一部を抑制したいと考えています。\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&$21$\tabularnewline
~~&$ 2$&b&$22$\tabularnewline
~~&$ 3$&a&$23$\tabularnewline
\midrule
{\bfseries Group B}&&&\tabularnewline
~~&$ 4$&b&$24$\tabularnewline
~~&$ 5$&a&$25$\tabularnewline
~~&$ 6$&b&$26$\tabularnewline
~~&$ 7$&a&$27$\tabularnewline
\midrule
{\bfseries Group C}&&&\tabularnewline
~~&$ 8$&b&$28$\tabularnewline
~~&$ 9$&a&$29$\tabularnewline
~~&$10$&b&$30$\tabularnewline
\bottomrule
\end{tabular}\end{center}
\end{table}

出力で「\midrule」の一部またはすべての出現を抑制するにはどうすればよいですか?

でこれを解決することに執着していませんが、フラグが非常に効果的な方法で解決するHmiscいくつかの制約があることに注意してください。rgroup私はそれを信じていない、xtableまたはstargazer(たとえば) 使用可能な代替手段を提供していませんが、私の例で提供されている行のグループ化を使用してレイアウトを保持できる限り、他のパッケージを受け入れることは確かです。

4

1 に答える 1

2

私が対処するHmisc::latexために取ったアプローチは、できる限り近づけ、結果をキャプチャし、正規表現で修正してから印刷することです。ここで正規表現を使用すると、これらのことを行うための専用の方法があると思われるため、少し罪悪感を感じますが、数時間検索した後は、もう気にしません。

Rマークダウンでは、

---
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
```

中罫のない表

于 2016-12-03T23:31:00.857 に答える