简介
Dashboards入门前三期可见:R文档沟通|Dashboards入门(1);R文档沟通|Dashboards入门(2);R文档沟通|Dashboards入门(3),今天给出该系列最后一期:在Dashboards中添加 Shiny应用。内容比较少,最后给出一些拓展资料供大家参考。
在仪表盘中添加 Shiny,可以利用viewers更改参数,并显示实时结果。或者当仪表盘的数据发生变化时,让仪表盘进行实时更新(请参阅 shiny 包中的 reactiveFileReader()
和 reactivePoll()
函数)。这是通过将 runtime: shiny
添加到标准仪表盘文档来实现的,然后添加一个或多个输入控件或响应式表达式来动态驱动仪表板内组件的外观。
在 flexdashboard 中使用 Shiny 可以将一个静态的 R Markdown 报告变成一个交互式文档。需要注意的是,交互式文档需要部署到 Shiny 的服务器上,以便广泛共享(而静态 R Markdown 文档是可以附加到电子邮件或从任何标准 web 服务器提供的独立 web 页面)。
注意, shinydashboard 包提供了用 Shiny 创建仪表盘的另一种方法。
入门指南
在仪表盘中添加 Shiny 组件的步骤如下:
- 在文档顶部 YAML 元数据中添加
runtime: shiny
。 - 在仪表盘第一列添加
{.sidebar}
属性,使其成为 Shiny 控件输入的控制台(注:这一步不是必须的,但这是基于 Shiny 仪表盘的经典布局)。 - 根据需求,添加 Shiny 的输入和输出。
- 当代码中包含绘图函数时(例如:
hist()
),得将它们封装在renderPlot()
中。这有利于界面在布局更改时,自动调整尺寸大小。
Shiny 仪表盘的一个示例
下图给出了 Shiny 仪表盘的一个示例:
代码语言:javascript复制---
title: "Old Faithful Eruptions"
output: flexdashboard::flex_dashboard
runtime: shiny
---
```{r global, include=FALSE}
# load data in 'global' chunk so it can be shared
# by all users of the dashboard
library(datasets)
data(faithful)
```
Column {.sidebar}
--------------------------------------------------
Waiting time between eruptions and the duration of the eruption
for the Old Faithful geyser in Yellowstone National Park,
Wyoming, USA.
```{r}
selectInput(
"n_breaks", label = "Number of bins:",
choices = c(10, 20, 35, 50), selected = 20
)
sliderInput(
"bw_adjust", label = "Bandwidth adjustment:",
min = 0.2, max = 2, value = 1, step = 0.2
)
```
Column
--------------------------------------------------
### Geyser Eruption Duration
```{r}
renderPlot({
erpt = faithful$eruptions
hist(
erpt, probability = TRUE, breaks = as.integer(input$n_breaks),
xlab = "Duration (minutes)", main = "Geyser Eruption Duration",
col = 'gray', border = 'white'
)
dens = density(erpt, adjust = input$bw_adjust)
lines(dens, col = "blue", lwd = 2)
})
```
其中,仪表盘的第一列包含了 {.sidebar}
属性和两个 Shiny 的输入控件;第二列包含了绘制图表的 Shiny 代码。
注:文档顶部标记为
global
的 R 代码块在全局环境中都可以被调用。这将为用户带来更好的启动性能,强烈推荐大家使用。
输入栏
通过添加 {.sidebar}
属性设置一个默认布局为左对齐,250像素宽度的左侧边栏。
在搭建多个页面的仪表盘时,如果你想创建一个应用于所有页面的工具条。这时,你可以使用一级结构来定义侧边栏。
拓展
下面给出一些学习 Shiny 和创建交互式文档的资源:
- Shiny 官方网站( http://shiny.rstudio.com) :包含大量的文章、教程和示例。
- Shiny 网站上的文章“Introduction to Interactive Documents”,这是一个很好的入门指南。
- 关于部署交互式文档,你可以使用 Shiny Server 或 RStudio Connect:https://www.rstudio.com/products/shiny/shiny-server/。