作者

zsc

发布日期

2018年11月21日

有一些时候,我们想把R对象输出为LaTeX格式或者HTML格式,怎么办呢?

简介knitr常用参数

xtable包

输出为纯HTML格式或者LaTeX格式

Show the code
tt <- head(iris) # 普通的输出

library(xtable)
print(xtable(tt),type="html") # 输出为纯HTML格式
<!-- html table generated in R 4.2.1 by xtable 1.8-4 package -->
<!-- Tue Aug 30 08:48:54 2022 -->
<table border=1>
<tr> <th>  </th> <th> Sepal.Length </th> <th> Sepal.Width </th> <th> Petal.Length </th> <th> Petal.Width </th> <th> Species </th>  </tr>
  <tr> <td align="right"> 1 </td> <td align="right"> 5.10 </td> <td align="right"> 3.50 </td> <td align="right"> 1.40 </td> <td align="right"> 0.20 </td> <td> setosa </td> </tr>
  <tr> <td align="right"> 2 </td> <td align="right"> 4.90 </td> <td align="right"> 3.00 </td> <td align="right"> 1.40 </td> <td align="right"> 0.20 </td> <td> setosa </td> </tr>
  <tr> <td align="right"> 3 </td> <td align="right"> 4.70 </td> <td align="right"> 3.20 </td> <td align="right"> 1.30 </td> <td align="right"> 0.20 </td> <td> setosa </td> </tr>
  <tr> <td align="right"> 4 </td> <td align="right"> 4.60 </td> <td align="right"> 3.10 </td> <td align="right"> 1.50 </td> <td align="right"> 0.20 </td> <td> setosa </td> </tr>
  <tr> <td align="right"> 5 </td> <td align="right"> 5.00 </td> <td align="right"> 3.60 </td> <td align="right"> 1.40 </td> <td align="right"> 0.20 </td> <td> setosa </td> </tr>
  <tr> <td align="right"> 6 </td> <td align="right"> 5.40 </td> <td align="right"> 3.90 </td> <td align="right"> 1.70 </td> <td align="right"> 0.40 </td> <td> setosa </td> </tr>
   </table>
Show the code
print(xtable(tt),type="latex") # 输出为纯LaTeX格式
% latex table generated in R 4.2.1 by xtable 1.8-4 package
% Tue Aug 30 08:48:54 2022
\begin{table}[ht]
\centering
\begin{tabular}{rrrrrl}
  \hline
 & Sepal.Length & Sepal.Width & Petal.Length & Petal.Width & Species \\ 
  \hline
1 & 5.10 & 3.50 & 1.40 & 0.20 & setosa \\ 
  2 & 4.90 & 3.00 & 1.40 & 0.20 & setosa \\ 
  3 & 4.70 & 3.20 & 1.30 & 0.20 & setosa \\ 
  4 & 4.60 & 3.10 & 1.50 & 0.20 & setosa \\ 
  5 & 5.00 & 3.60 & 1.40 & 0.20 & setosa \\ 
  6 & 5.40 & 3.90 & 1.70 & 0.40 & setosa \\ 
   \hline
\end{tabular}
\end{table}

若想在rmarkdown中输出时能正常显示上面的格式怎么办了?

只需添加参数即可

Show the code
library(xtable)
print(xtable(tt),type="html") # 输出latex 失效
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.10 3.50 1.40 0.20 setosa
2 4.90 3.00 1.40 0.20 setosa
3 4.70 3.20 1.30 0.20 setosa
4 4.60 3.10 1.50 0.20 setosa
5 5.00 3.60 1.40 0.20 setosa
6 5.40 3.90 1.70 0.40 setosa

kableExtra包

这个包在原有的输出上,做出了很大的改进,使得原有输出很丑的表格,瞬间变得高大上。而且不需要设置knit参数。很方便,推荐使用

Show the code
library(knitr)
library(kableExtra)
dt <- mtcars[1:5, 1:6]

基于HTML的table

Show the code
kable(dt)
mpg cyl disp hp drat wt
Mazda RX4 21.0 6 160 110 3.90 2.620
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875
Datsun 710 22.8 4 108 93 3.85 2.320
Hornet 4 Drive 21.4 6 258 110 3.08 3.215
Hornet Sportabout 18.7 8 360 175 3.15 3.440

设置主题

Show the code
mpg cyl disp hp drat wt
Mazda RX4 21.0 6 160 110 3.90 2.620
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875
Datsun 710 22.8 4 108 93 3.85 2.320
Hornet 4 Drive 21.4 6 258 110 3.08 3.215
Hornet Sportabout 18.7 8 360 175 3.15 3.440

表格样式

表格样式1

Show the code
kable(dt) %>%
  kable_styling(bootstrap_options = c("striped", "hover"))
mpg cyl disp hp drat wt
Mazda RX4 21.0 6 160 110 3.90 2.620
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875
Datsun 710 22.8 4 108 93 3.85 2.320
Hornet 4 Drive 21.4 6 258 110 3.08 3.215
Hornet Sportabout 18.7 8 360 175 3.15 3.440

表格样式2

Show the code
kable(dt) %>%
  kable_styling(bootstrap_options = "striped", full_width = F)
mpg cyl disp hp drat wt
Mazda RX4 21.0 6 160 110 3.90 2.620
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875
Datsun 710 22.8 4 108 93 3.85 2.320
Hornet 4 Drive 21.4 6 258 110 3.08 3.215
Hornet Sportabout 18.7 8 360 175 3.15 3.440
Show the code
R version 4.2.1 (2022-06-23)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Monterey 12.5.1

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] kableExtra_1.3.4 knitr_1.40       xtable_1.8-4    

loaded via a namespace (and not attached):
 [1] rstudioapi_0.14   xml2_1.3.3        magrittr_2.0.3    rvest_1.0.3      
 [5] munsell_0.5.0     viridisLite_0.4.1 colorspace_2.0-3  R6_2.5.1         
 [9] rlang_1.0.4       fastmap_1.1.0     highr_0.9         stringr_1.4.1    
[13] httr_1.4.4        tools_4.2.1       webshot_0.5.3     xfun_0.32        
[17] cli_3.3.0         systemfonts_1.0.4 htmltools_0.5.3   yaml_2.3.5       
[21] digest_0.6.29     lifecycle_1.0.1   htmlwidgets_1.5.4 glue_1.6.2       
[25] evaluate_0.16     rmarkdown_2.16.1  stringi_1.7.8     compiler_4.2.1   
[29] scales_1.2.1      svglite_2.1.0     jsonlite_1.8.0   

参考:

更多的尝试可以去https://haozhu233.github.io/kableExtra/

该网站上有对表格输出所有你想要的样式,比如HTML、LaTeX。

gt 包

可以官网看看