2017-01-26 3 views
1

Ich habe eine benannte Liste wie folgt:eine benannte Liste Sortierung mit actionButton Shiny

vegshop <- list(
    "FRUITS" = c("MANGO", "JACKFRUIT", "BANANA"), 
    'VEGETABLES' = c("OKRA", "BEANS", "CABBAGE") 
) 

Ich versuche, die Liste basierend auf den Namen, um zu bestellen, und das funktioniert gut.

vegshop[order(names(vegshop), decreasing = F)] 

aber wenn ich versuche, eine actionButton() zu tun mit, erhalte ich folgende Fehlermeldung:

the condition has `length > 1` and only the first element will be used 

oder

Warning: Error in order: unimplemented type 'list' in 'orderVector1' 

Eine tragfähige Beispiel ist wie folgt:

vegshop <- list(
    "FRUITS" = c("MANGO", "JACKFRUIT", "BANANA"), 
    'VEGETABLES' = c("OKRA", "BEANS", "CABBAGE") 
) 
grocer <- list(
    "GROCERY" = c("CEREALS", "PULSES", "TOILETRIES"), 
    "CLEANERS" = c("DETERGENTS", "FLOOR CLEANERS", "WIPES") 
) 

library(shiny) 

ui <- shinyUI(
    fluidPage(
    actionButton(style = "font-size: 10px;",inputId = "a2z", label = "Sort-A-Z", icon = icon("sort-alpha-asc")), 
    radioButtons(inputId = "shopsel", label = "SELECT SHOP", choices = c("SHOPS","SUPERMARKETS"), selected = "SHOPS", inline = TRUE), 
    uiOutput("shoplist"))) 

server <- function(session,input, output) { 
    output$shoplist <- renderUI({ 
     if(input$shopsel == "SHOPS") { 
     selectInput(inputId = "vegShopList", label = "SHOPLIST", choices = vegshop, selected = c('MANGO', 'JACKFRUIT', 'BANANA'), multiple = TRUE, selectize = FALSE) 
     } else if(input$shopsel == "SUPERMARKETS") { 
     selectInput(inputId = "smList", label = "SUPERMARKET", choices = grocer, selected = c('CEREALS', 'PULSES', 'TOILETRIES'), multiple = TRUE, selectize = FALSE)  
     } 
    }) 

    observeEvent(input$a2z, { 
     if(input$shopsel == "SHOPS") { 
      updateSelectInput(session, inputId = "vegShopList", choices = vegshop[order(vegshop), decreasing = F], selected = NULL) 
     } else if(input$shopsel == "SUPERMARKETS") { 
      updateSelectInput(session, inputId = "smList", choices = grocer[order(grocer), decreasing = F], selected = NULL) 
     } 
     }) 
} 

shinyApp(ui = ui, server = server) 

Wie könnte ich bekommen die Liste sortiert nach den Namen mit der actionButton().

Antwort

1

Sie haben einen Tippfehler: Außerhalb glänzend Sie schreiben:

vegshop[order(names(vegshop), decreasing = F)] 

Innerhalb glänzend:

vegshop[order(vegshop), decreasing = F] 

Das gleiche wahrscheinlich für den folgenden glänzenden Code-Schnipsel enthält:

grocer[order(grocer), decreasing = F] 
+0

Thank Sie. : -) .... – Apricot

+0

wenn es für Sie funktioniert, würde ich eine upvote schätzen :) – BigDataScientist

Verwandte Themen