2016-11-21 6 views
2

Ich arbeite eine Shiny App, wo ich dem Benutzer erlauben kann, aus einer längeren Liste von Genen (~ 1800) auszuwählen und dann entsprechende Graphen für das ausgewählte Gen zu haben angezeigt. Mein Problem ist, dass ich Shiny nicht dazu bringen kann, die ganze Liste der Gene anzuzeigen, aus der man im Dropdown-Menü der selectInput-Box auswählen kann. Es scheint, dass nur die ersten 1000 angezeigt werden.Zeige alle Werte in einem Shiny selectInput Feld (1000+)

Dann fand ich eine vielversprechende Lösung mit serverseitigen selectize, wo alle verfügbaren Optionen angezeigt werden, wenn der Benutzer beginnt, in das Auswahlfeld zu tippen. Wenn der Benutzer jedoch nicht tippt, zeigt das Dropdown-Menü immer noch nicht mehr als die ersten 1000 Gene an, was darauf hindeutet, dass nicht mehr Optionen verfügbar sind.

neu erstellt ich das Problem mit einem anderen Datensatz (1396 Flughafen-Codes) zur Veranschaulichung:

library(shiny) 
library(nycflights13) 

ui <- fluidPage(
    wellPanel(
    fluidRow(
     column(12, offset = 0, 
     titlePanel("Look up airports"))), 
    fluidRow(
     column(3, offset = 0, 
     selectizeInput(inputId = "airportCode", label = "", choices = NULL, 
      options = list(placeholder = "Type airport code")))) 
) 
) 

server <- function(input, output, session) { 
    updateSelectizeInput(session, "airportCode", 
    choices = as.vector(airports$faa), server = TRUE) 
} 

shinyApp(ui = ui, server = server) 

Wenn Sie Typen in das Auswahlfeld dont, der letzte in dem Drop-Down angezeigt Flughafencode Menü ist nur "PAM". Wenn Sie mit der Eingabe beginnen, können Sie bis zum letzten "ZYP" gehen, was für den Benutzer ziemlich verwirrend ist.

Am besten wäre es, wenn alle Werte im Dropdown-Menü erscheinen, wenn das irgendwie machbar ist. Ansonsten haben sie dort gar nichts aufgelistet und haben sie erst angezeigt, wenn Sie mit dem Tippen beginnen.

Antwort

6

Siehe https://github.com/rstudio/shiny/issues/412.

Sie können die maximale Anzahl von Optionen wie so ändern:

selectizeInput(inputId = "airportCode", label = "", choices = NULL, 
    options = list(placeholder = "Type airport code", 
    maxOptions = 2000) 
) 
+0

Danke, das war viel einfacher, als ich selbst erhofft;) –

Verwandte Themen