2016-12-03 4 views
0

Я использую пакет Hmisc в R для создания воспроизводимой таблицы LaTex и хотел бы подавить некоторые горизонтальные линии (\midrule), сгенерированные по умолчанию в режим booktabs. Я просеял документацию Hmisc, а также ряд решений Hmisc здесь и на tex.stackexchange, и я не верю, что на что-то подобное было дано ответ (но, пожалуйста, исправьте меня, если я ошибаюсь).Подавление горизонтальных линий Hmisc latex() в таблице

Вот минимальный пример, который должен быть воспроизводимым:

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 (например) предоставляют удобные альтернативы, я, конечно, открыт для других пакетов, пока я могу сохранить макет с группировками строк, как показано в моем примере.

ответ

2

Подход, который я принял к работе с Hmisc::latex, заключается в том, чтобы сделать его как можно ближе, зафиксировать результаты, исправить его с помощью регулярного выражения, а затем распечатать. Использование regex здесь заставляет меня чувствовать себя слегка виноватым, так как я подозреваю, что есть способ, который можно было бы создать специально, но после нескольких часов поиска мне просто все равно.

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

table without midrules

+0

Спасибо, @alistaire! Это определенно решает непосредственную проблему. Я разбирал подобный хак, когда вы отправили свой ответ. Я оставлю вопрос открытым дольше, на всякий случай, если кто-то найдет собственное решение «Hmisc». – ashaw

Смежные вопросы