簡體   English   中英

如何在服務器Shiny中使用反應變量

[英]How to use a reactive variable in server Shiny

我想創建一個如下所示的應用程序,只是一開始就是選擇氣缸數。 下面的示例選擇一個數據庫,我想放棄,直接進入氣缸的選擇。 我可以在這里使用過濾器選項嗎?

我的點子:

 df_mtcars <- reactive({
    cylinder_selected <- as.numeric(input$si_cylinders[1])        
    df <- mtcars %>% filter(cyl == cylinder_selected)        
    return(df)
  })

我的代碼:

用戶界面:

library(radarchart)
shinyUI(pageWithSidebar(      
  headerPanel("Car Comparison Radar"),      
  sidebarPanel(
    uiOutput("choose_dataset"),
    uiOutput("choose_car"),
    uiOutput("choose_columns")
  ),          
  mainPanel(
    chartJSRadarOutput('radar', height = '350px')    
  )
))

服務器:

library(shiny)
library(radarchart)

shinyServer(function(input, output) {

  # choose dataset but I want choose cyl
  output$choose_dataset <- renderUI({
    data_sets <- "mtcars"
    selectInput("dataset", "Data set", data_sets)
  })

  # select a car
  output$choose_car <- renderUI({
    selectInput("car","car",as.list(rownames(get(input$dataset))))
  })

  # Check boxes
  output$choose_columns <- renderUI({
    # If missing input, return to avoid error later in function
    if(is.null(input$dataset))
      return()

    # Get the data set with the appropriate name
    dat <- get(input$dataset)
    colnames <- names(dat)

    # Create the checkboxes and select them all by default
    checkboxGroupInput("columns", "Choose columns", 
                       choices  = colnames,
                       selected = colnames)
  })            
  output$radar <- renderChartJSRadar({

    # Get the data set
    dat <- get(input$dataset)

    # Make sure columns are correct for data set (when data set changes, the
    # columns will initially be for the previous data set)
    if (is.null(input$columns) || !(input$columns %in% names(dat)))
      return()

    # Keep the selected columns
    dat <- dat[, input$columns, drop = FALSE]

    #reform data for plot
    dat <- as.data.frame(t(dat), stringsAsFactors = FALSE)
    dat$labs <- row.names(dat)
    dat <- dat[, c('labs', input$car)]
    chartJSRadar(dat)
  })
 })

因為它是uiOutput("choose_car")給您所有的可能性。 如果添加selectInput來選擇氣缸,則會遇到問題,因為每個氣缸編號都有一些特定的汽車。

所以,你可以有你的selectInput汽車有條件selectInput的氣瓶。

您可以uiOutput("choose_dataset")刪除uiOutput("choose_dataset") ,因此根據您的示例,您可以嘗試以下操作:

ui = pageWithSidebar(      
  headerPanel("Car Comparison Radar"),      
  sidebarPanel(
    uiOutput("choose_dataset"),
    uiOutput("choose_cyclinder"),
    uiOutput("choose_car"),
    uiOutput("choose_columns")
  ),          
  mainPanel(
    chartJSRadarOutput('radar', height = '350px')    
  )
)



server = function(input, output) {


  output$choose_cyclinder <- renderUI({

    temp <-  mtcars %>% group_by(cyl) %>% summarise(Counts = n()) 
    cyl <- levels(as.factor(temp$cyl))
    selectInput("select_cyl", "Choose a cylinder", as.list(cyl), selected=TRUE, multiple = FALSE)
  })



  # choose dataset but I want choose cyl
  output$choose_dataset <- renderUI({
    data_sets <- "mtcars"
    selectInput("dataset", "Data set", data_sets)
  })

  # select a car
  output$choose_car <- renderUI({

    dat <- get(input$dataset)
    dat <- dat %>% tibble::rownames_to_column('carnames') %>%
    filter(cyl %in% c(input$select_cyl)) %>%
      tibble::column_to_rownames('carnames')
    selectInput("car","car",as.list(rownames(dat)))
  })



  # Check boxes
  output$choose_columns <- renderUI({
    # If missing input, return to avoid error later in function
    if(is.null(input$dataset))
      return()

    # Get the data set with the appropriate name
    dat <- get(input$dataset)
    colnames <- names(dat)

    # Create the checkboxes and select them all by default
    checkboxGroupInput("columns", "Choose columns", 
                       choices  = colnames,
                       selected = colnames)
  })            
  output$radar <- renderChartJSRadar({

    # Get the data set
    dat <- get(input$dataset)
   # dat <- mtcars

    # Make sure columns are correct for data set (when data set changes, the
    # columns will initially be for the previous data set)
    if (is.null(input$columns) || !(input$columns %in% names(dat)))
      return()

    # Keep the selected columns
    dat <- dat[, input$columns, drop = FALSE]

   # dat <- dat %>% filter(cyl %in% c(input$select_cyl))

    #reform data for plot
    dat <- as.data.frame(t(dat), stringsAsFactors = FALSE)
    dat$labs <- row.names(dat)
    dat <- dat[, c('labs', input$car)]
    chartJSRadar(dat)
  })
}

shinyApp(ui, server)

編輯:

ui = pageWithSidebar(      
  headerPanel("Car Comparison Radar"),      
  sidebarPanel(
    #uiOutput("choose_dataset"),
    uiOutput("choose_cyclinder"),
    uiOutput("choose_car"),
    uiOutput("choose_columns")
  ),          
  mainPanel(
    chartJSRadarOutput('radar', height = '350px')    
  )
)



server = function(input, output) {


  output$choose_cyclinder <- renderUI({

    temp <-  mtcars %>% group_by(cyl) %>% summarise(Counts = n()) 
    cyl <- levels(as.factor(temp$cyl))
    selectInput("select_cyl", "Choose a cylinder", as.list(cyl), selected=TRUE, multiple = FALSE)
  })



  # choose dataset but I want choose cyl
#  output$choose_dataset <- renderUI({
#    data_sets <- "mtcars"
#    selectInput("dataset", "Data set", data_sets)
#  })

  # select a car
  output$choose_car <- renderUI({

   # dat <- get(mtcars)
    dat <- mtcars
    dat <- dat %>% tibble::rownames_to_column('carnames') %>%
      filter(cyl %in% c(input$select_cyl)) %>%
      tibble::column_to_rownames('carnames')
    selectInput("car","car",as.list(rownames(dat)))
  })



  # Check boxes
  output$choose_columns <- renderUI({
    # If missing input, return to avoid error later in function
  #  if(is.null(input$dataset))
   #   return()

    # Get the data set with the appropriate name
   # dat <- get(input$dataset)
    dat <- mtcars
    colnames <- names(dat)

    # Create the checkboxes and select them all by default
    checkboxGroupInput("columns", "Choose columns", 
                       choices  = colnames,
                       selected = colnames)
  })            
  output$radar <- renderChartJSRadar({

    # Get the data set
    #dat <- get(input$dataset)
     dat <- mtcars

    # Make sure columns are correct for data set (when data set changes, the
    # columns will initially be for the previous data set)
    if (is.null(input$columns) || !(input$columns %in% names(dat)))
      return()

    # Keep the selected columns
    dat <- dat[, input$columns, drop = FALSE]

    # dat <- dat %>% filter(cyl %in% c(input$select_cyl))

    #reform data for plot
    dat <- as.data.frame(t(dat), stringsAsFactors = FALSE)
    dat$labs <- row.names(dat)
    dat <- dat[, c('labs', input$car)]
    chartJSRadar(dat)
  })
}

shinyApp(ui, server)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM