web-dev-qa-db-fra.com

Forcer aucune sélection par défaut dans selectInput ()

The Shiny documentation mentionne que pour selectInput()

selected La valeur (ou, si aucun n'a été fourni, le titre) de l'élément de navigation à sélectionner par défaut. Si NULL, la première navigation sera sélectionnée. 

Que faire si, par défaut, je ne souhaite sélectionner aucune valeur dans la liste de sélection? 

En fait, ma valeur sélectionnée est sélectionnée par défaut et la partie restante de l'application est automatiquement exécutée. Mais je ne veux pas sélectionner de valeur au départ. Que dois-je fournir à l'argument selected dans selectInput() pour le faire?


En effet, je ne veux rien être sélectionné automatiquement. J'ai utilisé le code ci-dessous mais je sélectionne toujours la première valeur disponible dans la liste. Je veux qu'il n'y ait pas de sélection par défaut, afin que l'utilisateur puisse ensuite sélectionner n'importe quelle option.

output$Choose_App <- renderUI({
selectInput("app",
            "Select App:",
            choices = as.character(mtrl_name),
            selected = NULL ,
            multiple = FALSE
           )
        })

En parcourant la documentation j'ai remarqué que la sélection ne peut être vide que si je sélectionne multiple=TRUE. Est-ce correct? 

Quand j'ai changé pour multiple=TRUE, alors ce n'est pas sélectionné par défaut, c'est ce que je veux. Mais malheureusement, avant de faire une sélection, le message d'erreur suivant s'affiche: 

ERROR: bad 'file' argument 

Est-ce que quelqu'un sait à ce sujet si je fais quelque chose de mal? Mais si je sélectionne ce fichier, l'erreur disparaîtra.

enter image description here

J'utilise le code suivant pour cela:

# server.R
setwd("/opt/shiny-server/samples/sample-apps/P-Dict_RDS2")
mtrl_name <- try(system("ls | grep -i .rds", intern = TRUE))

shinyServer(function(input, output) {

# First UI input (Service column) filter clientData 
output$Choose_Molecule <- renderUI({
selectInput("molecule",
            "Select Molecule:",
            choices = as.character(mtrl_name),
            selected = input$molecule,
            multiple = TRUE
           )
        })
18
Piyush

Vous pouvez utiliser l'entrée de sélection au lieu de l'entrée de sélection. Certaines options de sélection personnalisées permettent de définir la sélection initiale sur vide. Un exemple a été fourni dans la Galerie Shiny. En particulier, voir l'exemple # 6.

# make sure you have shiny >= 0.9.1
selectizeInput(
  'e6', '6. Placeholder', choices = state.name,
  options = list(
    placeholder = 'Please select an option below',
    onInitialize = I('function() { this.setValue(""); }')
  )
)

BTW, pour l'erreur "ERROR: bad 'file' argument", je ne pense pas que quiconque puisse vous aider sans voir le code source de votre application, et il peut s'agir d'une question distincte.

11
Yihui Xie

Face à un problème similaire. La solution que j'ai trouvée est basée sur la réponse de @ MKa. Vous ne voulez pas définir multiple = T si votre code ne peut pas gérer plusieurs valeurs. Ce que je suggère, c'est:

selectInput("molecule",
            "Select Molecule:",
            choices = c("",as.character(mtrl_name)),
            selected = NULL,
            multiple = F
           ) 

Et pour récupérer la valeur sélectionnée:

if(!is.null(input$molecule))
{
  if(nchar(input$molecule)>1)
  {
    #do your thing..
  }
}

Correction de mon problème. Faites-moi savoir si vous avez trouvé une meilleure solution.

9
rookieJoe

Je pense que vous pouvez le contourner en ajoutant une chaîne vide à votre liste de choix:

selectInput("app", 
"Select App:", 
choices = c("", as.character(mtrl_name)), 
selected = NULL, 
multiple = FALSE)
7
MKa

@ - Yihui Xie answer nécessite selectInput(..., selectize = TRUE). Si vous voulez selectize = FALSE, vous pouvez toujours obtenir un effet similaire comme suit. 

Ceci n'est pas documenté

selected La valeur initialement sélectionnée (ou plusieurs valeurs si multiple = TRUE). Si non spécifié, la première valeur par défaut pour les listes à sélection unique est définie par défaut et aucune valeur pour les listes à sélection multiple.

Mais pour les listes à sélection unique si vous pouvez utiliser selectize = FALSE, size = 4 (toute taille non -NULL fonctionnerait), vous pouvez définir selected = FALSE pour ne pas forcer la sélection par défaut. 

library(shiny)

# Define UI for application that draws a histogram
ui <- fluidPage(
      mainPanel(
         uiOutput("Choose_Molecule")
      )
)

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

    # First UI input (Service column) filter clientData 
    output$Choose_Molecule <- renderUI({
        selectInput("molecule",
                    "Select Molecule:",
                    choices = rownames(mtcars),
                    selected = FALSE,
                    multiple = FALSE
                    , selectize = FALSE, size = 4  ##needed for `selected = FALSE` to work
        )
    })

}

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

 enter image description here

0
landroni