IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Shiny : récupérer valeurs CheckboxGroupInput.


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2012
    Messages : 44
    Par défaut Shiny : récupérer valeurs CheckboxGroupInput.
    Bonjour à tous,

    Je débute sur R et sur Shiny également.

    Voici mon problème : je cherche à récupérer la/les valeur(s) cochée(s) dans un CheckboxGroupInput afin de dénombrer les occurences correspondantes dans la table de référence.

    A savoir que les données de ma tables sont toutes au format caractère.

    Je parviens à afficher le résultat de mes coches dans un "renderText", mais je n'arrive pas à les récupérer dans une variable afin de lancer une recherche dans la table de référence.

    Je suppose qu'il faut "jongler" avec les guillemets, mais j'avoue que je cale déjà.

    Si vous pouviez donner un petit coup de pouce à un noobie svp...

    Merci infiniment.

  2. #2
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Par défaut
    Bonjour,

    Je ne suis pas sûre d'avoir bien compris la question mais peut-être que l'exemple qui suit pourra vous aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # ui.R
     
    fluidPage(
     
      checkboxGroupInput("checkGroup", label = h3("Checkbox group"), 
        choices = list("Choice 1" = 1, "Choice 2" = 2, "Choice 3" = 3),
        selected = 1),
     
      hr(),
      fluidRow(column(3, verbatimTextOutput("value1")))
     
    )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # server.R
     
    function(input, output) {
     
      output$value1 <- renderPrint({ input$checkGroup[1] })
     
    }
    En effet, vous pouvez récupérer les valeurs sélectionnées dans le "CheckboxGroupInput" dans un vecteur : values <- input$checkGroup et y accéder comme pour n'importe quel vecteur R : values[1], par exemple.

    HTH !


    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2012
    Messages : 44
    Par défaut
    Bonjour,

    Pardon pour cette réponse tardive, et merci beaucoup pour votre réponse, elle m'a bien aidé.

    J'aimerais si vous le voulez bien vous demander une dernière chose : maintenant que je sais récupérer les valeurs des cases à cocher, j'aimerais créer plusieurs data frames en fonction des cases qui auront été cochées dans le checkboxGroup Input, mais je ne parviens pas à les créer.

    Voici mon code (package shinydashboard) pour l'interface Ui.R :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    library(shiny)
    library(DT)
    library(shinydashboard)
     
    ui <- dashboardPage(
      dashboardHeader(title = "TEST",titleWidth = 500
                      ), # dashboardHeader close
     
      dashboardSidebar(## Sidebar content
        sidebarMenu(
        menuItem("Level", tabName = "level", icon = icon("arrow-down")),
        menuSubItem("Country",icon = icon("globe"), tabName = "country"),
        menuSubItem("County",icon = icon("circle-o"), tabName = "county"),
        menuSubItem("Town",icon = icon("spinner"), tabName = "town"),
        menuItem("datas", tabName = "datas", icon = icon("list-alt")),
        menuItem("Maps", tabName = "maps", icon = icon("th"))
               ) # sidebarMenu close
                  ), # f. de dashboardSidebar
     
      # Body content
      dashboardBody(
        tabItems(# Country tab content
          tabItem(tabName = "country",
            fluidRow(
                box(title = "Click on datas tab", width = 9, 
                     background = "olive")
                    ) # fluidRow close
                ), # tabItem close
     
      # County tab content
      tabItem(tabName = "county",
            fluidRow(
              box(title = "Counties", width = 3, solidHeader = TRUE,
                  status = "primary",
                  checkboxGroupInput("dynamic_counties", label = "",
                              choices = list("First county"  = "North",
                                             "Second county" = "South",
                                             "Third county" = "East"))
                  ) # box close
                    ) # fluidRow close
            ), # tabItem close
     
      # Town tab content
      tabItem(tabName = "town",
              #h4("Check one or more box(es)",              
              checkboxGroupInput(
                  "dynamic", label = h4("Check one or more box(es)"),
                choices = list("01. Town 1"  =     "01", "02. Town 2" = "02",
                               "03. Town 3" = "03", "04. Town 4" = "04",
                               "05. Town 5" = "05", "06. Town 6" = "06",
                               "07. Town 7" = "07", "08. Town 8" = "08",
                               "09. Town 9" = "09", "10. Town 10" = "10",
                               "11. Town 11" = "11", "12. Town 12" = "12"))
     
            ), # tabItem close
     
      tabItem(tabName = "datas",
              fluidRow(
                box(title = "General datas", solidHeader = TRUE,
                             status = "primary",
                    DT::dataTableOutput("df"))
                      ) # fluidRow close
              ) # tabItem close
         ) # tabItems close
      ) # dashboardBody close
    ) # dashboardPage close
    Et le code côté Server.R :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    observe({town<-renderText({input$dynamic})
     if (length(input$dynamic) = 1){paste("BI14_",town)<-subset(BI14,PC %in%
     input$dynamic)}})
    J'ai une grosse table de 250 000 lignes et 190 colonnes appelée BI14, et afin d'accélérer les traitements, j'aimerais créer une nouvelle data frame à partir de la table BI14, à chaque fois qu'une case est cochée durant la sélection.

    Exemple : si je coche les cases "town 2" et "town 10 dans l'onglet "Town", j'aimerais que les tables BI14_02 et BI14_10 soient créées. C'est le champ "PC" de la table BI14 qui sert à faire la sélection de ce qui nous intéresse.
    Autre exemple, si je coche les cases "First county" et "Second county" dans l'onglet "County", les tables "BI14_North" et BI14_South seront créées.
    Par contre, si je clique sur l'onglet "Country", c'est la table BI14 qui servira de base de sélection et les traitements se feront directement dans cette table.

    Je suppose qu'il faut mettre en facteur les valeurs des checkboxGroup Input pour créer ces tables, mais lorsque j'éxecute mon code, ça n'a pas l'air de fonctionner car je ne vois pas apparaître de nouveaux objets data frames dans l'environnement.

    Je crois que mon niveau actuel sur R est bien insuffisant pour pouvoir faire de telles choses.

    J'espère que je vous ai exposé clairement mon cas, et que vous voudrez bien me donner un coup de pouce.

    Merci infiniment.

  4. #4
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Par défaut
    Bonjour,

    Si j'ai bien compris votre problématique, le problème vient de cet élément :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    paste("BI14_",town)<-subset(BI14,PC %in% input$dynamic)
    En effet, paste("BI14_",town) renvoie une chaîne de caractères, il n'est donc pas possible d'assigner une table "dans" une chaîne de caractères.
    Il y a ici plusieurs manières de procéder :

    Soit utiliser la fonction "assign" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assign( paste("BI14_",town), subset(BI14,PC %in% input$dynamic) )
    Soit passer par une liste, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    maliste <- list("")
     
    maliste[[ paste("BI14_",town) ]] <- subset(BI14,PC %in% input$dynamic)
     
    # puis pour accéder à un élément en particulier, par exemple :
     
    maliste$BI14_North
    HTH !


    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2012
    Messages : 44
    Par défaut
    Bonjour A.D,

    Merci infiniment pour votre réponse qui m'a bien éclairé et m'a bien fait avancer.

    Juste une dernière question svp : je pensais voir les nouvelles tables apparaître dans l'environnement mais ce n'est pas le cas. Est-ce normal ?

    Encore merci pour votre gentillesse.

    Bien à vous.

  6. #6
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Par défaut
    Bonjour,

    Citation Envoyé par Axe_Débutant Voir le message
    je pensais voir les nouvelles tables apparaître dans l'environnement mais ce n'est pas le cas.
    Vous voulez dire, dans l'environnement local ? celui de RStudio ?

    Ici vous êtes dans une appli "shiny" donc lorsqu'elle est lancée, vous n'êtes plus dans l'environnement R "de travail".
    Désolée si mon explication n'est pas très claire (je ne suis pas informaticienne ^^) mais en tout cas c'est tout à fait normal il me semble

    Bonne continuation !


    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POI]Récupérer valeur cellule suivant format
    Par leminipouce dans le forum Documents
    Réponses: 1
    Dernier message: 27/10/2005, 08h52
  2. Récupérer valeur contrôle en dynamique via requête
    Par nicburger dans le forum Access
    Réponses: 10
    Dernier message: 15/09/2005, 15h41
  3. [ActionScript] Récupérer valeur balise <param />
    Par JohnBlatt dans le forum Flash
    Réponses: 1
    Dernier message: 18/07/2005, 14h50
  4. CR9 - Récupérer valeurs multiples d'un champ paramètre
    Par CR9-Deb dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 06/07/2005, 16h08
  5. récupérer valeur d'un ID après insertion
    Par rikidi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/08/2003, 22h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo