R 闪亮:如何设置依赖于 updateVarSelectInput() 的 selectInput

R shiny: how to set selectInput that depends on the updateVarSelectInput()

我想上传 dataframe 闪亮的。 Shiny 将首先阅读其 colnames,并为用户提供 select column 的选项,然后使用此 selected 列,用户可以 select levels在本栏中,可作为输入进一步分析。

它与此 example 非常相似,但 selected 值是 output,我无法将其用于下游分析。

library(shiny)
myDF <- data.frame(A = 1:4, B = 3:6, C = 6:9, D = 10:13)
runApp(
  list(
    ui = fluidPage(
      uiOutput("myList"),
      uiOutput("myNumbers")
      )
    , server = function(input, output, session){
      output$myList <- renderUI({
        selectInput("compName", "Company Name:", LETTERS[1:4])
      })

      output$myNumbers <- renderUI({
        selectInput("compNo", "Product Line:", myDF[, input$compName])
      })
    }
    )
  )

我的 phsudo 代码是这样的:

library(shiny)
runApp(
  list(
    ui = fluidPage(
      fileInput(inputId = "rawFile"), # Read the dataframe
      varSelectInput(inputId = "getColumn",
                     data = ""),
      selectInput(inputId = "levels",
                  choices = "")
    )
    , server = function(input, output, session){
      
      df <- reactive({
        inFile <- input$rawFile
        if (is.null(inFile)){return(NULL)}
        df <- read.csv(filepath, header = T),
        )
        return(df)
      })
      
       getColumn <- reactive({
        return(as.character(input$getColumn))
      })
      
       updateVarSelectInput(
         inputId = "getColumn",
         data = df(),
         selected = ""
       )
       
       ## my problem is here:
       updateSelectInput(
         inputId = "levels",
         choices = levels(as.factor(df[, getColumn()])),
         selected = NULL
       )
      
      })
    }
  )
)

您这里有很多语法问题。以后请确保您有匹配的括号并且是MRE。以下应该有效。

library(shiny)

ui = fluidPage(
      fileInput(inputId = "rawFile", label="File"), # Read the dataframe
      varSelectInput(inputId = "getColumn", label="Get Column", data = ""),
      selectInput(inputId = "levels", label="Levels", choices = "")
    )
server = function(input, output, session){
      
  df <- reactive({
    inFile <- input$rawFile
    if (is.null(inFile)){return(NULL)}
    read.csv(inFile$datapath, header = T)
  })
  
  observeEvent(df(),{
    updateVarSelectInput(session, inputId = "getColumn",data = df(),selected = "")
  })
  
  observeEvent(input$getColumn, {
    updateSelectInput(session,inputId = "levels", choices = levels(as.factor(df()[[input$getColumn]])),selected = NULL)
  })
}

shinyApp(ui, server)