来自 fileInput 的多个 selectizeInput

multiple selectizeInput from fileInput

我想让用户输入一个文件 (.csv),然后从该文件中,两个 selectizeInputs 将填充 .csv 的列名。将询问用户上传文件中的哪一列是 y 变量,哪一列是 x 变量。这个,我能做到。

我不能做的是:我想从他们的 y 变量中获得选择,以从 x 变量下拉菜单中的 x 变量选择中消失。

此外,我已经使用 来尝试提供帮助,但他们没有使用 fileInput 中的值。因此,我无法使下面的代码正常工作。感谢您提供的任何 advice/help。

ui<- fluidPage(

  titlePanel("Test"),

  sidebarPanel(
    fileInput(inputId = "file1", label = "Upload File"),
    selectizeInput(
      "sampleyvars", "Y-vars", choices = NULL, multiple = FALSE
    ),
    selectizeInput(
      "samplevars", "X-vars", choices = NULL, multiple = TRUE
    )

  ),

  mainPanel(h3("Nothing special")
  )
)

server<- function(input, output, session) {

  observe({
    file1 <- input$file1
    if(is.null(file1)){return()} 
    dataSet <- read.csv(file=file1$datapath)

    vals1<-input$sampleyvars
    vals2<-input$samplevars

    updateSelectizeInput(session, "sampleyvars",
                         choices =  colnames(dataSet)[! vals1 %in% vals2])
    updateSelectizeInput(session, "samplexvars",
                         choices =colnames(dataSet)[! vals2 %in% vals1])
  })

}

shinyApp(ui = ui,server = server)

X 变量的小部件 ID 有误:samplevars 而不是 update* 函数中使用的 samplexvars。我将其更改为后一个 ID,并稍微调整了您的代码以获得所需的效果。


完整示例:

  ui<- fluidPage(

  titlePanel("Test"),

  sidebarPanel(
    fileInput(inputId = "file1", label = "Upload File"),
    selectizeInput(
      "sampleyvars", "Y-vars", choices = NULL, multiple = FALSE
    ),
    # you had ID here wrong
    selectizeInput(
      "samplexvars", "X-vars", choices = NULL, multiple = TRUE
    )

  ),

  mainPanel(h3("Nothing special")
  )
)

server<- function(input, output, session) {

  data <- reactive({
    file1 <- input$file1
    req(file1)
    dataSet <- read.csv(file=file1$datapath)
    vars <- colnames(dataSet)

    updateSelectizeInput(session, "sampleyvars", "Y-vars",
                         choices = vars, selected = vars[1])
    updateSelectizeInput(session, "samplexvars", choices = vars[-1], selected = vars[2])

    dataSet
  })

  observe({
    varX <- colnames(data())
    varX <- varX[!(varX %in% input$sampleyvars)]
    updateSelectizeInput(session, "samplexvars", "X-vars", choices = varX)
  })

}

shinyApp(ui = ui,server = server)