如何在Shiny中模块化反应输出(包括if语句)?

时间:2016-04-27 14:13:02

标签: r if-statement shiny

直到最近,我一直在服务器对象的每个输出中重复相同的被动语句。

server <- function(input, output) {
 output$MeanResult <- renderText({
   if(input$Posi != "All"){
     ProjDt <- ProjDt[ProjDt$Pos == input$Posi,]
   }
   ProjDt <- filter(ProjDt, TimeToKO < input$TimeKO)
   mean(ProjDt[[input$Metric]])
 })
 output$hist <- renderPlot({
   if(input$Posi != "All"){
     ProjDt <- ProjDt[ProjDt$Pos == input$Posi,]
   }
   ProjDt <- filter(ProjDt, TimeToKO < input$TimeKO)
   hist(ProjDt[[input$Metric]])
 })
} 

这似乎产生了预期的结果,但我想避免重复每个输出的反应部分。

因此,我试图模块化&#39;在将代码传递给输出语句之前代码的反应部分:

server <- function(input, output) {
 ProjDt <- reactive({
   if(input$Posi != "All"){
      ProjDt <- ProjDt[ProjDt$Pos == input$Posi,]
   }
   ProjDt <- filter(ProjDt, TimeToKO < input$TimeKO)
   ProjDt <- ProjDt[[input$Metric]]
 })
 output$MeanResult <- renderText({
   mean(ProjDt())
 })
 output$hist <- renderPlot({
   hist(ProjDt())
 })
}

我已经玩了很多但是我无法获得理想的结果。我得到的主要错误是'object of type 'closure' is not subsettable'

我对Shiny相对较新,所以我觉得我错过了一些非常基本的东西。

我需要做什么才能使模块化的无功输出工作?

0 个答案:

没有答案