闪亮的滤镜适用于2个输出

时间:2015-12-17 02:38:09

标签: r shiny

我正在尝试使用2个可视化(数据表和条形图)创建一个闪亮的仪表板,允许用户同时对两个可视化应用相同的过滤器。我尝试使用显示的here解决方案,但我想我错过了一些东西。 “Data5”是我用来填充的数据框的名称。任何帮助将不胜感激。

server.R

library(shiny)
library(ggplot2)
library(dplyr)

dt <- data5

shinyServer(function(input, output) {


data <- reactive({data5
    if (input$year != "All"){
      data <- data[data5$year == input$year,]
    }
   if (input$month != "All"){
      data <- data[data5$month == input$month,]
    }
   if (input$partner_name != "All"){
      data <- data[data5$partner_name == input$partner_name,]
    }
    if (input$cube_title != "All"){
      data <- data[data5$cube_title == input$cube_title,]
    }

  })

  #plots
  output$table1 <- renderDataTable({
    data
  })

  output$plot1 <- renderPlot({
    ggplot(data=subset(data5,cube_title=="Leads"), aes(x=month,y=f0_)) + geom_bar(fill="blue", stat = "identity") + ylab("Leads") + ggtitle("Leads")
  })
  output$plot2 <- renderPlot({
    ggplot(data=subset(data5,cube_title==c("CommunityProfileViews","HomeProfileViews")), aes(x=month,y=f0_)) + geom_bar(fill="blue", stat = "identity") + ylab("Profile Views") + ggtitle("Profile Views")

  })

})

ui.R

dashboardPage(
  skin = "blue",
  dashboardHeader(title = "Basic dashboard"),
  dashboardSidebar(
     ( 
          selectInput("year", 
                      "Year:", 
                      c("All", 
                        unique(as.character(data5$year))))
      ),
      ( 
          selectInput("month", 
                      "Month:", 
                      c("All", 
                        unique(as.character(data5$month))))
      ),
      (
          selectInput("partner_name", 
                      "Partner:", 
                      c("All", 
                        unique(as.character(data5$partner_name))))
                        ),
      (
          selectInput("cube_title", 
                      "Metric:", 
                      c("All", 
                        unique(as.character(data5$cube_title))))
      )        
    ),

  dashboardBody(


     tabsetPanel(id = "tabSelected",
                tabPanel("Charts", plotOutput("plot1"), 
                box(plotOutput("plot2"))),
                tabPanel("DataTable", dataTableOutput("table1"))
    )

               )
            )

1 个答案:

答案 0 :(得分:4)

问题1:被动返回一个函数,而不是一个对象。因此,我们需要在您的data()data函数中调用renderDataTable,而不是renderPlot

问题2:您需要将data()放入渲染功能中。目前,它正在调用data5,这不是被动的:

output$plot1 <- renderPlot({
    Temp <- data()
    ggplot(data=subset(Temp,cube_title=="Leads"), aes(x=month,y=f0_)) + geom_bar(fill="blue", stat = "identity") + ylab("Leads") + ggtitle("Leads")
}) 

问题3:您的被动功能会返回分配呼叫。我会更喜欢这样做:

data <- reactive({ #The data5 that was here is not necessary
  temp <- data5 
  if (input$year != "All"){
    temp <- temp[temp$year == input$year,]
  }
  if (input$month != "All"){
    temp <- temp[temp$month == input$month,]
  }
  if (input$partner_name != "All"){
    temp <- temp[temp$partner_name == input$partner_name,]
  }
  if (input$cube_title != "All"){
    temp <- temp[temp$cube_title == input$cube_title,]
  }
  return(temp)

})

因此,现在当我们致电data()时,我们会返回已过滤的data.frame

问题4 :(虽然不是问题)我会避免使用data作为对象名称。这意味着别的东西,在阅读代码时经常会让人感到困惑。使用更安全的DT或其他内容。您始终可以通过在控制台中键入exists("NameToCheck")来检查名称是否正在使用中。

Suggested Reading