2016-08-15 2 views
0

Я хотел бы, чтобы пользователь вводил файл (.csv) и из этого файла, два selectizeInputs будут заполняться именами столбцов .csv. Один спросит пользователя, какой из столбцов из загруженного файла является переменной y, а какой из столбцов - переменной x. Это я смог сделать.multiple selectizeInput from fileInput

Что я не могу сделать, так это следующее: я хотел бы получить выделение из их y-переменной, чтобы исчезнуть из их x-переменных в раскрывающемся меню x-variable.

Кроме того, я использовал answer to this question, чтобы попытаться помочь, но они не используют значения из fileInput. Таким образом, я не могу получить свой код, который ниже, для работы. Спасибо за любой совет/помощь, которую вы можете дать.

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) 

ответ

0

Вы были неправильно ID виджета для переменной X: samplevars вместо samplexvars, который вы использовали в update* функции. Я изменил его на последний 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) 
+1

Ах ... спасибо так много! Это именно то, что мне нужно. – abet