2017-03-29 97 views
0

我試圖從用戶上傳的數據文件中動態填充selectInput的值。 selectInput只能包含數字列。在R中的selectInput中只顯示一個值Shiny應用

這裏是我的server.R

... 
idx <- sapply(data.file, is.numeric) 
numeric_columns <- data.file[, idx] 
factor_columns <- data.file[, !idx] 

updateSelectInput(session, "bar_x", "Select1", choices = names(numeric_columns)) 
updateSelectInput(session, "bar_y", "Select2", choices = names(factor_columns)) 
... 

代碼片段對應ui.r

... 
selectInput("bar_x", "Select1", choices = NULL), 
selectInput("bar_y", "Select2", choices = NULL) 
... 

的代碼工作正常,只要有任何下拉不止一個值。但是,只要遇到一個要顯示在selectInput中的值,它就會失敗。

如果數據已上傳,並且如果只有一列爲數字,則無法控制該數據,我該如何處理此特定條件?

回答

1

信息:代碼由OP進行了修改,以使錯誤重現。 要解決您的問題,請使用val2 <- val[,idx, drop = FALSE] 您通過子集data.frame()刪除了列名稱。 要避免使用drop = FALSE;見Keep column name when select one column from a data frame/matrix in R

library(shiny) 

# Define UI for application that draws a histogram 
ui <- fluidPage(

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
     sidebarPanel(
# drj's changes START block 1 
     #selectInput('states', 'Select states', choices = c(1,2,4)) 
     selectInput('states', 'Select states', choices = NULL) 
# drj's changes END block 1 
    ), 

     # Show a plot of the generated distribution 
     mainPanel(
     plotOutput("distPlot") 
    ) 
    ) 
) 

# Define server logic required to draw a histogram 
server <- function(input, output, session) { 

    observe({ 


#drj's changes START block 2 
    #val <- c(1,2,3) 
    #names(val) <- c("a","b","c") 
    #updateSelectInput(session, 'states', 'Select states', choices = names(val[1])) 
    val <- as.data.frame(cbind(c("_1","_2","_3"), c(4, 4, 6))) 
    names(val) <- c("a","b") 
    val$b <- as.numeric(val$b) 
    idx <- sapply(val, is.numeric) 
    val2 <- val[,idx, drop = FALSE] 
    updateSelectInput(session, 'states', 'Select states', choices = names(val2)) 
#drj's changes END block 2 
    }) 
} 

# Run the application 
shinyApp(ui = ui, server = server) 
+0

我已更新您的代碼,只需稍作修改即可。現在我終止了。希望你現在能夠重現這個問題。 – Drj

+0

按預期工作。唯一我不明白的是,如果代碼是在沒有'drop'參數的控制檯中手動運行的,它確實給了我預期的列名稱。我最好的猜測是,在反應式代碼塊中將它作爲參數傳遞是不一樣的。 – Drj

+0

嗯,我無法重現,無法在控制檯或我的工作 – BigDataScientist

相關問題