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.
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
)
})
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.
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.
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)
@ - 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 simultiple = 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)