你怎么在knitr打印表

use*_*980 11 r knitr

我正在尝试使用knitr以表格格式打印数据框xtable:

```{r xtable,fig.width=10, fig.height=8, message=FALSE, results = 'asis', echo=FALSE, warning=FALSE, fig.cap='long caption', fig.scap='short',tidy=FALSE}

print(xtable(d),format="markdown")
```
Run Code Online (Sandbox Code Playgroud)

这是数据框d:

d <- structure(list(Hostname = structure(c(8L, 8L, 9L, 5L, 6L, 7L, 
1L, 2L, 3L, 4L), .Label = c("db01", "db02", "farm01", "farm02", 
"tom01", "tom02", "tom03", "web01", "web03"), class = "factor"), 
    Date = structure(c(6L, 10L, 5L, 3L, 2L, 1L, 8L, 9L, 7L, 4L
    ), .Label = c("10/5/2015 1:15", "10/5/2015 1:30", "10/5/2015 2:15", 
    "10/5/2015 4:30", "10/5/2015 8:30", "10/5/2015 8:45", "10/6/2015 8:15", 
    "10/6/2015 8:30", "9/11/2015 5:00", "9/11/2015 6:00"), class = "factor"), 
    Cpubusy = c(31L, 20L, 30L, 20L, 18L, 20L, 41L, 21L, 29L, 
    24L), UsedPercentMemory = c(99L, 98L, 95L, 99L, 99L, 99L, 
    99L, 98L, 63L, 99L)), .Names = c("Hostname", "Date", "Cpubusy", 
"UsedPercentMemory"), class = "data.frame", row.names = c(NA, 
-10L))
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么想法?

Pie*_*une 20

尝试kableknitr.它会很好地格式化表格.

在此输入图像描述

如果您想使用xtabletry:

print(xtable(d), type="latex", comment=FALSE)
Run Code Online (Sandbox Code Playgroud)

  • 像这样使用knitr kable:`table %&gt;% knit::kable("latex")` (2认同)

Kon*_*lph 5

虽然皮埃尔的解决方案有效,但理想情况下应该会自动发生.幸运的是,你可以使用knitr钩子来完成这项工作.

也就是说,鉴于此代码:

```{r}
d
```
Run Code Online (Sandbox Code Playgroud)

我们希望knitr能够自动生成格式良好的表,而无需手动调用格式化函数.

这是我正在使用的一些代码.您需要将它放在knitr文档的开头编译文档的代码中:

opts_chunk$set(render = function (object, ...) {
    if (pander_supported(object))
        pander(object, style = 'rmarkdown')
    else if (isS4(object))
        show(object)
    else
        print(object)
})
Run Code Online (Sandbox Code Playgroud)

这使用pander并且还需要辅助函数,pander_supported:

library(pander)

pander_supported = function (object)
    UseMethod('pander_supported')

pander_supported.default = function (object)
    any(class(object) %in% sub('^pander\\.', '', methods('pander')))

pander.table = function (x, ...)
    pander(`rownames<-`(rbind(x), NULL), ...)
Run Code Online (Sandbox Code Playgroud)

为了更好的格式化,我也使用这些默认值:

panderOptions('table.split.table', Inf)
panderOptions('table.alignment.default',
              function (df) ifelse(sapply(df, is.numeric), 'right', 'left'))
panderOptions('table.alignment.rownames', 'left')
Run Code Online (Sandbox Code Playgroud)