【发布时间】:2018-08-08 23:19:48
【问题描述】:
在使用rmarkdown渲染pdf文档时,我们可以使用三个选项来打印data.frame:default、kable和tibble(见here)
使用默认选项,可以限制打印的行数,选项:max.print
对于tibble,我们可以使用:dplyr.print_max
我找不到限制kable 行数的方法。有可能吗?
【问题讨论】:
标签: r r-markdown knitr kable
在使用rmarkdown渲染pdf文档时,我们可以使用三个选项来打印data.frame:default、kable和tibble(见here)
使用默认选项,可以限制打印的行数,选项:max.print
对于tibble,我们可以使用:dplyr.print_max
我找不到限制kable 行数的方法。有可能吗?
【问题讨论】:
标签: r r-markdown knitr kable
kable 将传递给它的完整数据帧呈现为输出文档中的表格。 AFAIK 没有任何参数会限制行数。但是,您可以预先选择输出表中的行数(例如,kable(head(dat)) 或 kable(dat[1:5, ]))。如果您想避免每次都选择行,您可以编写一个辅助函数来限制打印的行数。例如:
---
output: pdf_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(knitr)
```
```{r}
my_kable = function(x, max.rows=6, ...) {
kable(x[1:max.rows, ], ...)
}
```
```{r}
my_kable(mtcars, caption="My first caption")
```
```{r}
iris$Sepal.Length = 1000 * iris$Sepal.Length
my_kable(iris, 3, caption="My second caption", format.args=list(big.mark=","))
```
【讨论】:
pdf_document:(knitr header)中使用了df_print: kable选项。这个想法是在不改变代码的情况下控制最大行数,或者我运行代码时的结果(使用 RStudio)。所以在我的 R 块中,我简单地说,例如iris。 df_print: kable 选项仅用于呈现 pdf 文档。
一个非常简单的解决方案是将kable 包裹在head 周围:
kable(head(mtcars, n = 5))
【讨论】:
你可以像这样创建一个打印数据帧的自定义方法。
改编自Yihui Xie的解释here
---
title: "Untitled"
output: html_document
---
```{r include=FALSE}
knit_print.data.frame <- function(x, ...) {
head(x, 5) |>
knitr::kable() |>
paste(collapse = "\n") |>
knitr::asis_output()
}
registerS3method(
genname = "knit_print",
class = "data.frame",
method = knit_print.data.frame,
envir = asNamespace("knitr")
)
```
```{r}
iris
tibble::as_tibble(iris)
```
【讨论】: