我试图在flexdashboard文档中使用Shiny进行反应性selectInput。
我的第一个selectInput
选择了海洋公园中的区域类型。
selectInput("Zone", label = "Marine Park Zoning:",
choices = c("All", levels(EoTR$MarineParkZone)), selected = "All")
然后我使用此输入创建一个仅在步骤1中选择了区域的反应数据框。
zone.choices = reactive({
if (input$Zone=="All"){
select(EoTR, ReefName, MarineParkZone, MarineParkMgmtSection)
}else{
select(EoTR, ReefName, MarineParkZone, MarineParkMgmtSection)%>%
filter(MarineParkZone==input$Zone)}
})
然后我尝试使用此反应数据框来定义我对下一个selectInput
的选择
reactive({
selectInput("Reef", label = "Priority Reef:",
choices = zone.choices()$ReefName, selected = "Arlington Reef (16-064)")
})
当我运行文档时,我的第二个输入显示了一堆代码而不是选择菜单,因此基于该选择器的所有进程都失败了。
下面是一些可以重现问题的代码
---
title: "Untitled"
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
runtime: shiny
---
```{r}
library(flexdashboard)
library(dplyr)
EoTR = data.frame(ReefName=c("Reef1", "Reef2", "Reef3", "Reef4"),
MarineParkZone=c("Fished", "Fished", "Un-Fished", "Un-Fished"))
selectInput("Zone", label = "Marine Park Zoning:",
choices = c("All", levels(EoTR$MarineParkZone)), selected = "All")
zone.choices = reactive({
if (input$Zone=="All"){
select(EoTR, ReefName, MarineParkZone)
}else{
select(EoTR, ReefName, MarineParkZone)%>%
filter(MarineParkZone==input$Zone)}
})
reactive({
selectInput("Reef", label = "Priority Reef:",
choices = zone.choices()$ReefName, selected = "Reef1")
})
```
我知道这可能与我如何定义我的反应性输入有些愚蠢,但我真的很感激任何帮助。
干杯,
萨姆
答案 0 :(得分:3)
以下是您的解决方案:
---
title: "Untitled"
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
runtime: shiny
---
```{r}
library(flexdashboard)
library(dplyr)
EoTR = data.frame(ReefName=c("Reef1", "Reef2", "Reef3", "Reef4"),
MarineParkZone=c("Fished", "Fished", "Un-Fished", "Un-Fished"))
selectInput("Zone", label = "Marine Park Zoning:",
choices = c("All", levels(EoTR$MarineParkZone)), selected = "All")
zone.choices = reactive({
if (input$Zone=="All"){
EoTR
}else{
EoTR %>%
filter(MarineParkZone==input$Zone)}
})
renderUI({selectInput("Reef", label = "Priority Reef:",
choices = zone.choices()$ReefName, selected = "Reef1")})
```
问题在于您的selectInput("Reef"...)
,您已将其设置为被动(其为inccorect) - > 您应该将其设置为UI对象({{1} })。