在Rmarkdown动态标签,它可以创建标签,例如:创建于Rmarkdown
---
output: html_document
---
# Tabs {.tabset}
## Tab 1
foo
## Tab 2
bar
我不知道是否有可能创建的标签任意数量?如何以编程方式创建选项卡?
以下代码很难做到这一点,但它会产生一个标题而不是标签。
---
output: html_document
---
# Tabs {.tabset}
```{r echo=FALSE}
shiny::tags$h2("Tab 1")
```
foo
## Tab 2
bar
解决方案
感谢@GGamba提供一个很好的解决方案。我需要更进一步,并能够将选项卡添加为循环的一部分,因此我需要进行两项更改。首先,我用这个代码,动态地添加标签(这里唯一的区别是,我强迫的hrefCode
评价超时内,否则召集所有超时将使用相同的值)
(function(hrefCode){setTimeout(function(){
var tabContent = document.createElement('div');
var tabContainerTarget = document.getElementsByClassName('tab-content')[0];
tabContent.setAttribute('id', 'tab-' + hrefCode);
tabContent.setAttribute('class', 'tab-pane')
tabContent.innerHTML = '", gsub('\n', '', Panel, fixed = TRUE), "';
tabContainerTarget.appendChild(tabContent);
}, 100);
})(hrefCode);
其次,添加标签在一个循环中,你可以做这样的事情:
tabsToAdd <- list("tab3" = "hello", "tab4" = "world")
shiny::tagList(lapply(names(tabsToAdd), function(x) {
addToTabset(title = x, tabsetId = 'tbSet1',
tabPanel(x, tabsToAdd[[x]]))
}))
如果光泽本身不能做,那是一个很好的解决方法。你是否也有一个解决方案来完成这个循环,例如。 'lapply(字母,函数(字母)addToTabset(字母,'tbSet1',tabPanel(字母,字母)))'?我不擅长高级Rmd以及如何让html正确呈现 –
想通了。不得不将这个循环包装在'tagList()'中,并且还需要在javascript中进行一些修复(请参阅问题本身,以获取修改后的代码) –