Bonjour,

J'ai un soucis avec l'assemblage de 2 dataframes dans mon application. Voici le fonctionnement de l'application :
- En entrée je sélectionne des critères qui vont me permettre d'afficher des données issues d'un fichier .ods (le premier dataframe)
- J'ajoute en plus deux colonnes boutons : une pour faire de la validation de ligne et l'autre avec des liens pour chaque ligne. (le deuxième dataframe)

Le problème c'est que pour les colonnes bouton on me demande une longueur qui doit (de ce que j'ai compris) correspondre au nombre de lignes à afficher. Mais comme c'est dépendant des critères du premier dataframe, je ne peux pas mettre un nombre fixe car c'est variable. Je ne vois pas comment résoudre le problème, mais peut-être que ma logique n'est pas bonne.

Voici le code coté serveur :

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
server = function(input, output, session) {
 
 
  #Création de la fonction shinyInput
  shinyInput <- function(FUN, len, id, ...) {
    inputs <- character(len)
    for (i in seq_len(len)) {
      inputs[i] <- as.character(FUN(paste0(id, i), ...))
    }
    inputs
  }
 
  #Création des colonnes bouton
  df <- reactiveValues(data = data.frame(
    validation = shinyInput(actionButton, 1,
                            id = "button_",
                            label = "Check",
                            onclick = 'Shiny.onInputChange(\"select_button\", this.id)'),
    lien_fiches = createLink(base$fiches.donnees)[1]
 
  ))
 
  #Création de la règle de filtre a partir des critères
  create_rules <- reactive({
    paste(c(input$territoire, input$doc), "== 'Oui'",  collapse = " | ")
  })
 
  #Extraction des critères de la base
  FinalData <- eventReactive(input$submit, {
    if(is.null(c(input$territoire, input$doc)))
      return()
    else (base %>% filter_(create_rules()))
  })
 
  #Assemblage des deux dataframe
  fdt <- eventReactive(input$submit, {
    tmp_fdt <- cbind(FinalData()[1:3], df$data)
    colnames(tmp_fdt) <- c("Sous-thèmes", "Données", "Insee", "Validation", "Fiches données")
    tmp_fdt
  })
 
  #Filtres
  gfilter <- reactive({
    filtered_data <- fdt()
 
    #Filtres simples
    if (input$f_st != "Tous" & input$f_don == "Tous"){
      filtered_data <- filtered_data[FinalData()$sous.themes == input$f_st,]
      updateSelectInput(session, inputId = "f_don", choices = c("Tous", filtered_data[2]))
    }
    if (input$f_don != "Tous" & input$f_st == "Tous"){
      filtered_data <- filtered_data[FinalData()$donnees == input$f_don,]
      updateSelectInput(session, inputId = "f_st", choices = c("Tous", filtered_data[1,1]))
    }
    if (input$f_check != "Tous" & input$f_check == "Check"){
      filtered_data <- filtered_data[FinalData()$select_button == input$f_check,]
    }
    if (input$f_check != "Tous" & input$f_check == "Ok"){
      filtered_data <- filtered_data[FinalData()$df$validation == input$f_check,]
    }
    if (input$f_doc != "Tous" & input$f_doc == "PCAET"){
      filtered_data <- filtered_data[FinalData()$PCAET == "Oui",]
      updateSelectInput(session, inputId = "f_don", choices = c("Tous", filtered_data[2]))
      updateSelectInput(session, inputId = "f_st", choices = c("Tous", filtered_data[1,1]))
    }
 
    return(filtered_data)
  })
 
  #Rendu de la table d'extraction
  output$Synthese <-  DT::renderDT(DT::datatable({
 
    gfilter()
 
  },
 
  escape = FALSE,
  selection = "none",
  extensions="Buttons",
  options = list(
    pageLength = 100,
    #Cache la colonne "Insee"
    columnDefs = list(list(visible=FALSE, targets=3)),
 
    #Couleur du header de l'extraction
    initComplete = JS(
      "function(settings, json) {",
      "$(this.api().table().header()).css({'background-color': '#1A242F', 'color': '#fff'});",
      "}"),
 
    #Paramètrage des boutons d'export
    dom="Bfrtip",
    buttons =  list(list(
      extend = "collection",
      filename = "Extraction",
      buttons = c("copy", "csv", "excel", "pdf", "print"),
      text = "Télécharger la sélection")
    ),
    language = list(paginate = 
                      list('next'="suivant", 
                           'previous'="précédent"),
                    info = "Pages de _PAGE_ à _PAGES_",
                    search = "Rechercher",
                    infoFiltered = "(filtre des _MAX_ lignes)")
  )))
 
}
Merci pour votre aide