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] Lister les valeurs d'un fichier dans un selectInput


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Géomaticien
    Inscrit en
    Avril 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Géomaticien

    Informations forums :
    Inscription : Avril 2019
    Messages : 9
    Par défaut [Shiny] Lister les valeurs d'un fichier dans un selectInput
    Bonjour à tous,

    J'ai découvert R il n'y a une semaine et j'ai décidé de me lancer dans le développement d'un petit outil pour une mission. Mais mes capacités sont limités pour le moment et la doc trouvée sur le net ne pas beaucoup aidé pour mon problème.

    Dans mon shinydashboard, j'ai un bouton qui permet l'import d'un fichier .ods, et j'ai des selectInput juste en dessous. J'aimerai pouvoir récupérer les entête de champs du fichier directement dans les selectInput. Par exemple pour la première sélection les entête de C1 à F1, etc. Je ne sais pas comment récupérer ces données.

    Ensuite dans mon fichier .ods, j'ai pour chaque champs des cellules remplis avec "Oui" ou rien. J'aimerai qu'a partir des sélections ci-dessus il me sorte les lignes ou la valeur est égal à "Oui". En gros si on a sélectionné C1 dans un des selectInput, il extrait les lignes ou la valeur de C1 = "Oui".

    Cette extraction est affiché ensuite dans un tableau avec des champs sélectionnés.

    Je sais pas si c'est très clair.

    Voilà mon code pour le moment :

    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
     
    library(DT)
    library(readODS)
    library(shinydashboard)
     
      ui <- dashboardPage(
        dashboardHeader(title ="Test"),
        dashboardSidebar(
          fileInput("odsFile", "Choisissez un fichier .ods",
                    accept = c(".ods")),
          selectInput("perimetre", "Territoire", "test"),
          selectInput("echelle", "Echelle", "test2"),
          selectInput("doc", "Document existant", "test3"),
          actionButton("submit", ("Extraction"))
        ),
          dashboardBody(
            fluidPage(
              fluidRow(
                column(width=12,
                        tableOutput("mydata"),
                        DT::dataTableOutput("Extraction_table")
                )
              )
            )
          )
      )
     
      server = function(input, output) {
     
        #Initial Dataframe
        FinalData = eventReactive(input$submit,{
          Testdata = data.frame("Sous.Themes" = input$perimetre, "Donnees" = input$echelle,
                                      "Validation" = "", "Fiche donnee" = input$doc)
        })
     
        #Extraction
        output$Extraction_table = renderDataTable(FinalData())
     
        #Fichier source
        mydatarea <- reactive({
          inFile <- input$odsFile
          if (is.null(inFile)) { 
            return(NULL)
            read.ods(inFile$datapath, sheet = 1, header = input$header)
          }
        })
      }
     
      shinyApp(ui, server)
    Pour le moment dans les selectInput je n'ai réussi à afficher que des valeurs fixes "test", "test2", "test3" mais pas les variables des entêtes.

    Si une âme généreuse pouvait m'orienter

    Merci d'avance !!!

  2. #2
    Membre expérimenté
    Homme Profil pro
    Data scientist
    Inscrit en
    Février 2017
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data scientist
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 211
    Par défaut
    Peut être essayer :

    si j'ai bien compris ta question

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    selectInput("select", "Choisissez :",
                            list(liste= c("perimetre", "Territoire", "test")))
     
    #ect...

  3. #3
    Membre averti
    Homme Profil pro
    Géomaticien
    Inscrit en
    Avril 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Géomaticien

    Informations forums :
    Inscription : Avril 2019
    Messages : 9
    Par défaut
    Merci pour ta réponse, mais je n'ai pas réussi à récupérer mes headers dans la liste

  4. #4
    Membre expérimenté
    Homme Profil pro
    Data scientist
    Inscrit en
    Février 2017
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data scientist
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 211
    Par défaut
    Peut - être comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    selectInput("select", "Choisissez :",
                            list(liste=  colnames(ta_table) ))
     
    #ect...

  5. #5
    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,

    Quelques pistes de réponse :

    • Il faut récupérer de manière dynamique les noms de colonnes côté "server" :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      # Exemple
       
      col_names <- reactive({
       
          colnames( mydata() ) # avec mydata() les données récupérées dynamiquement
       
      })
    • Il faut mettre à jour dynamiquement les valeurs possibles pour le "selectInput" côté "server" :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      # Exemple
       
      observe({
       
          updateSelectInput(session, inputId = "myselect", choices = col_names() ) # avec "myselect" l'identifiant correspondant à l'élément "selectInput" côté "UI"
       
      })


    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.

  6. #6
    Membre averti
    Homme Profil pro
    Géomaticien
    Inscrit en
    Avril 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Géomaticien

    Informations forums :
    Inscription : Avril 2019
    Messages : 9
    Par défaut
    Merci pour vos réponses !!

    J'ai réussis à m'en sortir avec vos conseils. Par contre j'essaye de faire des filtres pour mon tableau final et j'aimerai que les filtres se mettent à jour en fonction des sélections que j'ai fait en amont.
    Actuellement j'arrive à les remplir avec la totalité des données mais pas avec la sélection.
    Y a t'il également un moyen pour que mes filtres apparaissent en même temps que mon tableau et pas par défaut.

    Voici le code

    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
     
     
    library(DT)
    library(readODS)
    library(shiny)
    library(shinydashboard)
    library(dplyr)
    library(shinyWidgets)
     
    #Lecture du fichier
    base <- read_ods("base.ods")
     
      ui <- dashboardPage(
        dashboardHeader(title ="Test"),
     
        #Mise de en forme de la Sidebar
        dashboardSidebar(
     
          #Couleurs de l'entête
          tags$head(tags$style(HTML('.logo {
                                  background-color: #8eb06a !important;
                                    }
                                    .navbar {
                                    background-color: #a7cd7f !important;
                                    }
                                    '))),
     
          #Texte principal
          h4(strong("Critères de sélection"), align="center"),
     
          #Liste des critères de sélection
          prettyCheckboxGroup("territoire", "Territoire",
                              thick = TRUE, 
                              shape = "curve", 
                              animation = "pulse", 
                              choices = c("Valeur1", "Valeur2", "Valeur3", "Valeur4", "Valeur5", "Valeur6")),
          prettyCheckboxGroup("doc", "Documents de planification existants",
                              thick = TRUE, 
                              shape = "curve", 
                              animation = "pulse",
                              choices = c("Valeur1", "Valeur2", "Valeur3", "Valeur4", "Valeur5", "Valeur6", "Valeur7")),
     
          #Et le miracle fut !
          actionButton("submit", ("Extraction"))
        ),
     
          #Mise en forme de la page principale
          dashboardBody(
            fluidPage(
     
              #Onglets Extraction et Ajout de données
              mainPanel(width = 12,
                tabsetPanel(
     
                  #Onglet Extraction
                  tabPanel("Extraction",
                    fluidRow(
     
                      #Liste des différents filtres possibles sur le résultat
                      column(width=4,
                             selectInput("st",
                                         "Sous-Thèmes :",
                                         c("Tous",
                                           unique(as.character(base$sous.themes))))
                      ),
                      column(width=4,
                             selectInput("don",
                                         "Données :",
                                         c("Tous",
                                           unique(as.character(base$donnees))))
                      ),
                      column(width=4,
                             selectInput("chk",
                                         "Check :",
                                         c("Tous",
                                           unique(as.character(base$check))))
                      ),
                      column(width=12,
                              DT::dataTableOutput("Synthese")
                      )
                    )
                  ),
     
                #Onglet Ajout de données
                tabPanel("Ajout de données",
                  fluidRow(
                    selectInput("sous.themes.insert","Sous-Thèmes :", c("", unique(as.character(base$sous.themes)))),
                    textInput("donnees.insert","Données :"),
     
                    actionButton("insert", ("Ajout"))
                  )
                )
          )
      ))))
     
      server = function(input, output, session) {
     
        #Création de la règle de filtre a partir des critères
        create_rules <- reactive({
          paste(c(input$territoire, input$doc), "== 'Oui'",  collapse = " | ")
        })
     
     
        #Méthode pour le click
        FinalData <- eventReactive(input$submit,{
          base %>% filter_(create_rules())
     
        })
     
        #Rendu de la table d'extraction
        output$Synthese <-  DT::renderDataTable(DT::datatable({
     
          fdt <- FinalData()
     
          if (input$st != "Tous") {
            fdt <- fdt[fdt$sous.themes == input$st,]
          }
          if (input$don != "Tous") {
            fdt <- fdt[fdt$donnees == input$don,]
          }
          if (input$chk != "Tous") {
            fdt <- fdt[fdt$check == input$chk,]
          }
     
          fdt[1:4]
     
        }))
    }
     
      shinyApp(ui, server)
    Merci !

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 14/05/2008, 17h15
  2. recuperer les valeurs d'une cellule dans un fichier excel
    Par cortex59 dans le forum Général VBA
    Réponses: 2
    Dernier message: 24/04/2008, 13h10
  3. Récupérer les valeurs d'un noeud dans un fichier XML
    Par yosthegost dans le forum Delphi
    Réponses: 1
    Dernier message: 30/05/2006, 17h38
  4. Mettre les valeurs d'un tableau dans un fichier
    Par ero-sennin dans le forum C++
    Réponses: 4
    Dernier message: 14/03/2006, 13h47
  5. Réponses: 9
    Dernier message: 05/11/2005, 14h59

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