我最近问了一个关于dynamically creating tabsets containing graphs in R markdown.
的问题绘制基础R和ggplot图有不同的方法。但是,这些方法似乎不适用于DT
表:
# DataTable Tabs {.tabset .tabset-pills}
```{r}
library(DT)
dt_list <- list(datatable(data.frame('x'=rnorm(100))),
datatable(data.frame('y'=diffinv(rnorm(99)))),
datatable(data.frame('z'=diff(rnorm(101)))))
names(dt_list) <- c('x','y','z')
```
```{r, results='asis'}
for(h in names(df)){
cat("##", h, '<br>', '\n')
cat('This is text for', h, '<br>', '\n\n')
print(dt_list[[h]])
cat('\n', '<br>', '\n\n')
}
```
我如何动态渲染这些标签?我知道DT
表是建立在JS上的,所以我想这种方法也有助于动态渲染很多其他类型的内容。
答案 0 :(得分:1)
我不确定问题出在哪里。但GitHub已经存在问题。
解决方法是渲染另一个表并将其删除。另请注意在循环中使用tagList
。似乎可以加载数据表库,并且选项卡式数据表可以工作:
---
title: "Untitled"
output: html_document
---
# DataTable Tabs {.tabset .tabset-pills}
```{r}
library(DT)
library(htmltools)
# we simply select the table, look for the parent container
# and remove it from the DOM
jsc <- 'function(settings, json) { $(this).parents(".datatables").remove(); }'
datatable(matrix(NA, 2, 2), options = list("initComplete" = JS(jsc)))
```
```{r}
dt_list <- list(datatable(data.frame('x'=1:10)),
datatable(data.frame('y'=11:20)),
datatable(data.frame('z'=21:30)))
names(dt_list) <- c('x','y','z')
```
```{r, results='asis'}
for(h in names(dt_list)){
cat("##", h, '<br>', '\n')
cat('This is text for', h, '<br>', '\n\n')
print(tagList(dt_list[[h]]))
cat('\n', '<br>', '\n\n')
}
```