Problem
当使用shinydashboard在ShinyApp中包含从RMarkdown渲染的HTML文档时,只有当RMarkdown文件的YAML块中的设置“self_contained:”设置为true时,HTML文档才能正确渲染。但是,这样做会导致您无法从闪亮仪表板的侧边栏菜单中选择 tabItems。
相反,当设置“self_contained:”设置为 false 时,HTML 文档的元素(例如绘图和浮动目录)
缺少(附加文件中存在非 HTML 元素),但您可以从侧边栏菜单中选择 tabItems,并且应用程序的其余部分工作正常。
理想情况下,您将能够在闪亮仪表板中包含从 RMarkdown 渲染的功能齐全的 HTML 文件,同时保留应用程序其余部分的功能。
我之前关于如何在基本的 Shiny 应用程序中包含 HTML 的文章提到了这个额外的问题(在 R Shiny 应用程序中渲染 R Markdown 文档时参考书目不起作用 https://stackoverflow.com/questions/64368840/bibliography-not-working-when-rendering-a-r-markdown-document-within-an-r-shiny).
请在下面找到一个最小的可重现示例。
最小可重复示例
RMarkdown 文件
RMarkdownFile.Rmd
---
title: "RMarkdownFile"
author: "Test Author"
date: "15/10/2020"
output:
html_document:
toc: true
toc_float: true
number_sections: true
self_contained: true
bibliography: bibliography.bib
link-citations: yes
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(ggplot2)
```
# Statement
ggplot2 [@wickham2016ggplot2] is a great package!
```{r plot, message=FALSE}
ggplot2::ggplot(data = mpg) +
ggplot2::geom_point(mapping = aes(x = displ, y = hwy))
```
## References
参考书目
参考书目.bib
@book{wickham2016ggplot2,
title={ggplot2: elegant graphics for data analysis},
author={Wickham, Hadley},
year={2016},
publisher={springer}
}
闪亮的应用程序
app.R
library(shiny)
library(shinydashboard)
library(rmarkdown)
rmarkdown::render("RMarkdownFile.Rmd")
ui <- dashboardPage(
dashboardHeader(title = "Test"),
dashboardSidebar(
sidebarMenu(id = "sidebarmenu",
menuItem("Test Section 1", tabName = "testitem1",
menuSubItem("Test Section 1a", tabName = "testitem1a"),
menuSubItem("Test Section 1b", tabName = "testitem1b")
),
menuItem("Test Section 2", tabName = "testitem2",
menuSubItem("Test Section 2a", tabName = "testitem2a"),
menuSubItem("Test Section 2b", tabName = "testitem2b")
),
menuItem("Test Section HTML", tabName = "testitemhtml"
)
)
),
dashboardBody(
tabItems(
tabItem(tabName = "testitem1a",
fluidRow(
box(title = "Test Section 1a",
width = 12))
),
tabItem(tabName = "testitem1b",
fluidRow(
box(title = "Test Section 1b",
width = 12))
),
tabItem(tabName = "testitem2a",
fluidRow(
box(title = "Test Section 2a",
width = 12))
),
tabItem(tabName = "testitem2b",
fluidRow(
box(title = "Test Section 2b",
width = 12))
),
tabItem(tabName = "testitemhtml",
fluidPage(
box(title = "Test Section HTML",
width = 12,
includeHTML("RMarkdownFile.html")))
)
)
)
)
server <- function(input, output) { }
shinyApp(ui, server)
任何解决此问题的帮助将不胜感激!