我正在尝试动态地创建和循环htmlwidgets
,如DT
、plotly
或rbokeh
,以生成自动的编织机报告。是否有方法将knitr
格式(如tabset
)添加到github问题https://github.com/ramnathv/htmlwidgets/pull/110中概述的tagList
方法中?我也在那里张贴了这个问题。
下面是一些我正在思考的例子代码,但并不完全有效。我要做的是创建10个选项卡,每个选项卡都带有一个从plot_list
生成的绘图副本。现在发生的是所有的情节进入最后一个标签。在实践中,plot_list
将有不同的情节/表。
#' ---
#' title: htmltools::tagList test
#' output:
#' html_document
#' ---
#' # {.tabset}
#+ results='asis', echo=FALSE
library(plotly)
library(printr)
plot_list = lapply(1:10,
function(i){
as.widget(plot_ly(iris,
x = iris[["Sepal.Length"]],
y = iris[["Sepal.Width"]],
mode = "markers"))
}
)
htmltools::tagList( lapply(1:10,
function(i) {
pandoc.header(paste0("Tab",i,' {.tabset}'), 2)
plot_list[[i]]
}
)
)
# rmarkdown::render("your_path/htmltoolsTagList_test.r")
以前,我用嵌套的for-循环成功地做了这样的事情,但是一旦我尝试使用带有HTML依赖项的图形,当然就不会呈现这些图形,因为它们不再是顶级表达式。在knitr
中这样循环是可能的吗?
接下来的一个问题是:假设我想将这些选项卡嵌套到以相同方式创建的另一组选项卡中,这有可能吗?我想问的是,我可以使用类似于嵌套for-循环的方法动态嵌套选项卡吗?
我仍然在学习如何使用knitr
,并将感谢任何帮助!谢谢!
发布于 2016-05-04 10:14:56
我将复制我的回应,以吉特布问题如下。
很好的问题,我认为这个讨论会对其他人有所帮助。在不借助rmarkdown
的情况下,从头开始构建类似于您提议的内容可能是最简单的。
人工构建
# https://github.com/ramnathv/htmlwidgets/pull/110#issuecomment-216562703
library(plotly)
library(htmltools)
library(markdown)
library(shiny)
browsable(
attachDependencies(
tagList(
tags$div(
class="tabs",
tags$ul(
class="nav nav-tabs",
role="tablist",
tags$li(
tags$a(
"data-toggle"="tab",
href="#tab-1",
"Iris"
)
),
tags$li(
tags$a(
"data-toggle"="tab",
href="#tab-2",
"Cars"
)
)
),
tags$div(
class="tab-content",
tags$div(
class="tab-pane active",
id="tab-1",
as.widget(
plot_ly(
iris,
x = iris[["Sepal.Length"]],
y = iris[["Sepal.Width"]],
mode = "markers"
)
)
),
tags$div(
class="tab-pane",
id="tab-2",
as.widget(
plot_ly(
cars,
x = speed,
y = dist,
mode = "markers"
)
)
)
)
)
),
# attach dependencies
# see https://github.com/rstudio/rmarkdown/blob/master/R/html_document.R#L235
list(
rmarkdown::html_dependency_jquery(),
shiny::bootstrapLib()
)
)
)
降下来
也许有一个更好的方法来使这个工作,但直到有人让我正确的,我们可以采取从上面的方法,并使用它在rmarkdown
。不幸的是,这仍然是非常手动的。为了获得更多的参考,下面是RStudio用来构建tabsets
的tabsets
。
---
title: "tabs and htmlwidgets"
author: "Kent Russell"
date: "May 3, 2016"
output: html_document
---
```{r echo=FALSE, message=FALSE, warning=FALSE}
图书馆(巧妙地)
库(Htmltools)
图书馆(Magrittr)
列出一份供示范用的地块名单
名称将是选项卡的标题。
情节<-列表(
“虹膜”= plot_ly(
iris,
x = iris[["Sepal.Length"]],
y = iris[["Sepal.Width"]],
mode = "markers"
),
“汽车”= plot_ly(
cars,
x = speed,
y = dist,
mode = "markers"
)
)
为我们的选项卡创建顶级div
标签$div(
创建标题为ul和li/a的选项卡
标签$ul(
class="nav nav-tabs",
role="tablist",
lapply(
names(plots),
function(p){
tags$li(
tags$a(
"data-toggle"="tab",
href=paste0("#tab-",p),
p
)
)
}
)
),
用我们巧妙的情节填充标签
标签$div(
class="tab-content",
lapply(
names(plots),
function(p){
tags$div(
# make the first tabpane active
class=ifelse(p==names(plots)[1],"tab-pane active","tab-pane"),
# id will need to match the id provided to the a href above
id=paste0("tab-",p),
as.widget(plots[[p]])
)
}
)
)
) %>%
附加必要的依赖项
因为我们是在手动地做rmarkdown为我们做的事情
attachDependencies(
list(
rmarkdown::html_dependency_jquery(),
shiny::bootstrapLib()
)
)
https://stackoverflow.com/questions/37008600
复制