以编程方式生成四开版数据表的选项卡集面板

Jan*_*ary 5 datatable r r-markdown dt quarto

这个问题与this类似,但又不完全相同。

基本上,我有许多表想使用DT::datatable(). 不幸的是,我不知道如何做。

以下代码有效,但我需要手动输入所有代码:

---
title: "Untitled"
format: html
---

```{r}
library(DT)
```
    
::: {.panel-tabset}

### table no. 1

```{r}
#| results: asis
datatable(mtcars)
```

### table no. 2

```{r}
#| results: asis
datatable(mtcars)
```
:::
Run Code Online (Sandbox Code Playgroud)

下面的方法有效,但不是datatable()使用一个简单的降价表,pander它不能给出所需的效果。

---
title: "Untitled"
format: html
---

```{r}
library(pander)
```
    
::: {.panel-tabset}
```{r}
#| results: asis

for(i in 1:2) {
  cat(sprintf("\n### table no. %d\n\n", i))
  cat(pander(mtcars))
}
```
:::
Run Code Online (Sandbox Code Playgroud)

以下代码不起作用,我不知道如何使其起作用:

---
title: "Untitled"
format: html
---

```{r}
library(DT)
```
    
::: {.panel-tabset}
```{r}
#| results: asis

for(i in 1:2) {
  cat(sprintf("\n### table no. %d\n\n", i))
  print(datatable(mtcars))
}
```
:::
Run Code Online (Sandbox Code Playgroud)

ste*_*fan 7

这是 RMarkdown 上下文中的一个已知问题。但事实证明,RMarkdown 的解决方案也适用于 Quarto。

按照与RMarkdown [Discalimer:答案来自我] 中相同问题相关的这个答案,您可以通过首先确保所需的 javascript 依赖项包含DT在您的文档中并将调用包装datatable在其中来实现您想要的结果htmltools::tagList

---
title: "Untitled"
format: html
---

```{r}
library(DT)
```
    
```{r, include=FALSE}
# Init Step to make sure that the dependencies are loaded
htmltools::tagList(datatable(mtcars))
```

::: {.panel-tabset}
```{r}
#| results: asis
for(i in 1:2) {
  cat(sprintf("\n### table no. %d\n\n", i))
  print(htmltools::tagList(datatable(mtcars)))
}
```
:::
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述