代码之家  ›  专栏  ›  技术社区  ›  hugh_man

尝试应用条件筛选器时出错

  •  0
  • hugh_man  · 技术社区  · 2 年前

    我有以下数据,我正在尝试制作一组下拉过滤器,根据过滤器中选择的内容改变显示的数据帧:

    myData<- structure(list(waterbody = c("Homer", "Homer", "Homer", "Homer", 
    "West", "West", "West", "East", "East", "East", "East", "Walnut", 
    "Walnut", "Walnut", "Walnut"), transect_number = c(1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), species = c("LMB", 
    "LMB", "GZS", "BLG", "LMB", "GZS", "BLG", "BLG", "BLG", "GZS", 
    "BLG", "BLG", "LMB", "GZS", "LMB"), length_mm = c(430L, 430L, 
    NA, 165L, 345L, NA, 128L, 117L, 93L, NA, 135L, 161L, 402L, NA, 
    347L), wt_g = c(1270L, 1325L, NA, 108L, 545L, NA, 40L, 28L, 15L, 
    NA, 42L, 81L, 865L, NA, 525L)), row.names = c(NA, -15L), class = "data.frame")
    

    此外,每个后续过滤器中的选项应根据在上一个过滤器中选择的内容进行更改。因此,可供选择的物种将根据选择的水体而变化(因为并非所有物种都出现在每个水体中)。

    到目前为止,我的代码是:

    # User Interface
    ui <- shinyUI(
      fluidPage(
        titlePanel("File Inputs"),
        sidebarLayout(
          sidebarPanel(
            fileInput(
              'data',
              'Choose CSV File',
              accept = c('text/csv',
                         'text/comma-separated-values,text/plain',
                         '.csv')
            ),
            uiOutput("pick_waterbody"),
            uiOutput("pick_species")
          ),
          mainPanel(DT::dataTableOutput('dt_table'),)
        )
      )
    )
      
      
      
    # Server
    server <- function(input, output, session) {
        myData <- reactive({
          inFile <- input$data
          if (is.null(inFile))
            return(NULL)
          data <- read.csv(inFile$datapath, header = T)
          data
        })
        
        output$dt_table <- DT::renderDataTable({
          DT::datatable(myData())
        })
    
        
        output$pick_waterbody <- rednderUI({
          pickerInput(
            "pick_waterbody",
            "Water(s) of Interest:",
            choices = unique(myData$waterbody),
            options = list(`actions-box` = TRUE),
          )}
        )
        
        output$pick_species <- renderUI({
          updatePickerInput(
            "pick_species",
            "Species of Interest:",
            choices = as.character(myData[myData$waterbody == input$pick_waterbody, "species"]),
            options = list(`actions-box` = TRUE))
        })
    }
    

    当关闭服务器代码后 output$dt_table ,该应用程序运行良好。但当我把 output$pick_waterbody 代码我得到一个“找不到函数”错误。此外 output$pick_species 代码显示发现了意外的符号。我已经把它梳理了1000遍,但我似乎无法解决这些问题。

    如果能帮我找出我的错误所在,我将不胜感激。

    1 回复  |  直到 2 年前
        1
  •  1
  •   YBS    2 年前

    你打错了,需要吗 req() ,而不是 updatePickerInput() 只是 pickerInput .试试这个

     output$pick_waterbody <- renderUI({
        req(myData())
        pickerInput(
          "pick_waterbody",
          "Water(s) of Interest:",
          choices = unique(myData()$waterbody),
          options = list(`actions-box` = TRUE),
        )}
      )
      
      output$pick_species <- renderUI({
        req(myData(),input$pick_waterbody)
        pickerInput(
          "pick_species",
          "Species of Interest:",
          choices = as.character(myData()[myData()$waterbody == input$pick_waterbody, "species"]),
          options = list(`actions-box` = TRUE))
      })