我的最小演示rmarkdown示例(
test.rmd
)如下:
---
output:
pdf_document:
latex_engine: xelatex
keep_tex: no
colorlinks: yes
header-includes:
- \usepackage[bookmarksopen]{hyperref}
- \usepackage{booktabs}
- \usepackage{longtable}
- \usepackage{multirow}
- \usepackage{tabu}
- \usepackage{float}
- \usepackage{xcolor}
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(
message = FALSE,
warning = FALSE
)
library(flextable)
library(knitr)
library(kableExtra)
```
# code for data
```{r}
library(ISLR) #for Default data
library(MASS) #for LDA function
fit = lda(default~balance+student, data=Default)
tab = table(predict(fit)$class, Default$default); tab #confusion matrix
Total = sum; atab = addmargins(tab, FUN=Total); atab #change Sum to Total
```
# table: pure latex
```tex
\documentclass{article}
\usepackage{multirow}
\usepackage{float}
\begin{document}
\begin{table}[!h]
\caption{table via pure latex}\label{mycap}
\centering
\begin{tabular}{ccccc}
\hline
& & \multicolumn{3}{c}{True default status} \\
\cline{3-5}
& & No & Yes & Total \\
\hline
\multirow{3}{*}{Predicted default status}
& No &9644 &252 &9896 \\
& Yes &23 &23 &104 \\
& Total &9667 &333 &10000 \\
\hline
\end{tabular}
\end{table}
\end{document}
```
```{=latex}
\begin{table}[!h]
\caption{table via pure latex}\label{mycap}
\centering
\begin{tabular}{ccccc}
\hline
& & \multicolumn{3}{c}{True default status} \\
\cline{3-5}
& & No & Yes & Total \\
\hline
\multirow{3}{*}{Predicted default status}
& No &9644 &252 &9896 \\
& Yes &23 &23 &104 \\
& Total &9667 &333 &10000 \\
\hline
\end{tabular}
\end{table}
```
# table: rmarkdown
## flextable
```{r error=TRUE}
flextable(atab)
dtab = as.data.frame(atab); ft = flextable(dtab)
ft <- set_caption(ft, "table via flextable"); ft
```
## kableExtra
```{r}
kbl(atab, booktabs = F, caption = "table via kableExtra") |>
add_header_above(c(" ", "True default status" = 3)) |>
kable_styling(latex_options = c("repeat_header")) |>
kable_styling(latex_options = c("hold_position"))
```
如演示所示,我想将混淆矩阵结果显示为类似于 纯乳胶显示。有几个
R
包可以结合rmarkdown显示表格,例如knitr::kable
,flexable
等;有关更多讨论和比较,请参见https://hughjonesd.github.io/huxtable/design-principles.html。由于我对flexable
和kableExtra
有点熟悉,所以我尽量把这两个包进行一下
如
test.rmd
生成的PDF所示,我对flexable
不满意(也许我遗漏了一些步骤)。 kableExtra
可以提供更好的显示,但它不能解决 multirow 问题(我也是来自 https://cran.r-project.org/web/packages/kableExtra/vignettes 的
collapse_rows
/awesome_table_in_pdf.pdf)。我怎样才能优雅有效地解决我的问题?