【问题标题】:how do you print table in knitr你如何在knitr中打印表格
【发布时间】:2015-10-28 16:38:04
【问题描述】:

我正在尝试让我们 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")
```

这是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))

任何想法我在这里缺少什么?

【问题讨论】:

  • 我认为你试图尝试的是print(xtable(d), type = "markdown")。当您使用 format 参数时,部分匹配会将其分配给 format.args 参数。如果您改用了type 参数,则会在错误中告知您xtable 仅支持HTML 和LaTeX 输出。 Pierre 建议使用knitr::kable 是一个不错的选择。

标签: r knitr


【解决方案1】:

knitr 尝试kable。它会很好地格式化表格。

如果你想使用xtable试试:

print(xtable(d), type="latex", comment=FALSE)

【讨论】:

  • @Pierre Lafortune,我能够使用它:print(xtable(t), type = "latex"),但我也在 pdf 文件中收到此消息:% latex table由 xtable 1.7-4 包在 R 3.2.2 中生成 % Wed Oct 28 12:42:49 2015,你怎么不显示消息?
  • 在代码头中,尝试设置 echo=F 和 warning=F
  • 已经设置为False,我还是文档中的消息。 {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), type="latex", comment=FALSE)
  • 像这样使用 knitr kable:table %&gt;% knitr::kable("latex")
【解决方案2】:

虽然 Pierre 的解决方案有效,但理想情况下这应该自动发生。幸运的是,您可以使用 knitr hooks 来完成这项工作。

也就是说,给定这段代码:

```{r}
d
```

我们希望 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)
})

这使用了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), ...)

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

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

【讨论】:

    【解决方案3】:

    如果您要将 knitr/rmarkdown 报告呈现为 HTML,则可以使用函数 rmarkdown::paged_table()

    例如:

    ---
    title: "My report"
    output: html_document
    ---
    
    ```{r}
    library(rmarkdown)
    
    f <- function() {
      paged_table(mtcars)
    }
    
    f()
    ```
    

    这个 .Rmd 被编入以下 HTML:

    另外,请考虑通过gt() 使用gt package

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-20
      • 2020-11-10
      • 2013-09-19
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      相关资源
      最近更新 更多