根据输入将不同的输出传递给反应帧

时间:2016-05-30 05:03:38

标签: r ggplot2 shiny flexdashboard

我正在尝试整理我的第一个flexdashboard。 (有关我正在使用的数据的大纲,请参阅here

我希望仪表板能够为每个设施提供汇总数据,或者将其分解为单个药物。

我到目前为止的代码是:

Inputs {.sidebar}
-----------------------------------------------------------------------
```{r}
selectInput("hosp",
        label = h4("Select hospital:"),
        choices = list("Hospital 1" = "hosp1",
                       "Hospital 2" = "hosp2"), selected = "hosp1")

sliderInput("dates",
        label = h4("Select dates:"),
        min = as.Date("2006-01-01"), max = as.Date("2015-12-01"),
        value = c(as.Date("2006-01-01"), as.Date("2015-12-01")),
        timeFormat = "%b-%Y")

````

Row
-----------------------------------------------------------------------
### Usage Graph
```{r}
renderPlot({
    p <- ggplot(data = summarise(group_by(filter(usage,
                      hospital == input$hosp, date > as.Date(input$dates[1])
                      & date < as.Date(input$dates[2])), date),
                      total = round(sum(usage))), aes(x = date, y = total)) 
    + geom_line()

 p
})
```

这很好用 - 我有医院的下拉菜单,可以使用滑块选择日期范围。

我想做的是添加两个不同的下拉菜单;一个选择图表的类型(总用量,个别药物,药物类别)

我是如何尝试这样做的:

selectInput("gtype",
        label = h4("Select graph type:"),
        choices = list("Total Use" = "abxa",
                       "By Class" = "abxc",
                       "By Agent" = "abxd"), selected = "abxa")

conditionalPanel("input.gtype == 'abxd'",
             selectInput("abagent",
                         label = h4("Select Agent:"),
                         choices = list("Amoxycillin" = "amoxycillin",
                                        "Co-amoxyclav" = "amoxicillin-clavulanate",
                                        "Cephazolin" = "cefazolin",
                                        "Gentamicin" = "gentamicin"), selected = "cefazolin"

这在侧边栏中效果很好 - 选择“按代理”弹出下一个列表框,选择药物,然后让我选择一个。

但如何更改图表面板中的输出?

我需要为每个用例略微更改ggplot调用;有没有办法根据下拉列表的结果渲染不同的图?

我尝试过使用:

conditionalPanel("input.type" == "abxa",
    renderPlot({ plot 1 call })
)
conditionalPanel("input.type" == "abxd",
    renderPlot({ plot 2 call })
)

但是无论侧栏设置如何,都不会出现情节(我已经确认,如果你单独使用它们,两个renderPlot调用都会起作用)

提前致谢。

1 个答案:

答案 0 :(得分:0)

不要为每个绘图做一个条件面板,只需在renderplot函数中进行检查:

renderPlot({ 
  if(input$gtype=='abxa'){
    plot 1 call 
  }else if(input$gtype=='abxd'){
    plot 2 call
  }
})