有什么方法可以将 rmarkdown::paged_table() 设置为打印 table 的默认方式?

Any way to set rmarkdown::paged_table() as the deafult way to printing table?

我看到了 tutorial 可以将表格打印为 knitr::kable() 格式的方法。是否可以对 rmarkdown::paged_table() 格式执行相同的操作,以便默认情况下所有表格都将以 paged_table() 格式打印,就像 R 中的 {rmarkdown} 包一样?

将其放入 yaml 中。

output:
  html_document: 
    df_print: paged

在 Rmarkdown 的情况下,@VishalKatti 提供的答案是恕我直言。对于 Quarto(或 RMarkdown),调整 R Markdown Cookbook 中的示例一个选项以获得您想要的结果可能如下所示:

---
title: Use a custom `knit_print` method to print data frames
format: html
---

First, we define a `knit_print` method, and register it:

```{r}
knit_print.data.frame = function(x, ...) {
  res = rmarkdown::paged_table(x)
  rmarkdown:::knit_print.data.frame(res)
}

registerS3method(
  "knit_print", "data.frame", knit_print.data.frame,
  envir = asNamespace("knitr")
)
```

Now we can test this custom printing method on data frames.
Note that you no longer need to call `rmarkdown::paged_table()`
explicitly.

```{r}
head(iris)
```

```{r}
head(mtcars)
```

要完成上面分享的答案,这里有几种实现方法

使用 knitr

的打印功能

对于分页 table 这将是这个函数:(由 rmarkdown 在内部用于 df_print 功能)

paged_print <- function(x, options) {
  knitr::asis_output(
    rmarkdown:::paged_table_html(x, options = attr(
      x,
      "options"
    )),
    meta = list(dependencies = rmarkdown::html_dependency_pagedtable())
  )
}

这与其他答案中的功能类似,只是 rmarkdown:::knit_print.data.frame 比 juts 处理分页 table 做得更多。

然后您可以在文档中注册它,以便它默认应用于任何 data.frame 打印。

registerS3method(
  "knit_print", "data.frame", paged_print,
  envir = asNamespace("knitr")
)

或者在需要在单个值块中打印 data.frame 的块的基础上使用它。 (

```{r, render = paged_print}
iris
```

更多关于 knitr 的自定义打印方法 its vignette

为 knitr 使用选项挂钩

df_print 块选项也可以使用 option hook

以这种方式模拟
knitr::opts_hooks$set(df_print = function(options) {
  if (options$df_print == "paged") {
    options$render = paged_print
  }
  options
})

这将允许类似

```{r, df_print = "paged"}
iris
```

```{r}
iris
```
  • 第一个 table 将显示为分页 table
  • 第二个table将照常显示data.frame