Rapport Rmd pour utilisateurs ne maitrisant pas R

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

David Hacquard
Messages : 31
Enregistré le : 14 Mai 2020, 07:52

Rapport Rmd pour utilisateurs ne maitrisant pas R

Messagepar David Hacquard » 15 Fév 2021, 15:32

Bonjour,

J'ai réalisé un script R qui permet d'obtenir un rapport R Markdown avec un certain type de jeu de données. Je souhaiterai désormais que d'autres personnes puissent utiliser ce script afin d'obtenir un rapport automatisé avec leurs données mais sans passer par ce script (notamment pour les personnes ne maîtrisant pas R).

J'ai essayé de passer par "shiny" en espérant faire une interface qui charge un jeu de données et réaliserait mon script automatiquement mais ça me parait assez fastidieux.

Avez-vous des exemples ou des idées ?

Merci

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Rapport Rmd pour utilisateurs ne maitrisant pas R

Messagepar Serge Rapenne » 15 Fév 2021, 22:17

Bonjour,

R+shiny me semble effectivement une bonne idée et pas forcement très fastidieux selon la complexité d'obtention des données nécessaire pour générer le rapport, il y a plein d'ex sur internet. Un bon point de départ : https://beta.rstudioconnect.com/content ... kdown.html qui contient notamment : https://shiny.rstudio.com/gallery/downl ... ports.html (dans la section "Generating downloadable reports from Shiny app")

Serge

David Hacquard
Messages : 31
Enregistré le : 14 Mai 2020, 07:52

Re: Rapport Rmd pour utilisateurs ne maitrisant pas R

Messagepar David Hacquard » 16 Fév 2021, 08:36

Merci pour votre réponse, je vais jeter un coup d'œil.

C'est plus l'insertion de mon script sous shiny qui me parait fastidieux.

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Rapport Rmd pour utilisateurs ne maitrisant pas R

Messagepar Mickael Canouil » 16 Fév 2021, 09:17

Pour compléter, a priori, vous n'avez besoin que d'un moyen pour permettre à l'utilisateur de téléverser un jeu de donnée et de pouvoir télécharger un rapport basé sur même jeu de donnée.
En d'autres mots, il s'agit de combiner les deux exemples suivants : https://shiny.rstudio.com/gallery/downl ... ports.html (déjà proposé par Serge) et https://shiny.rstudio.com/gallery/file-upload.html

Cela pourrait grossièrement ressembler à quelque-chose comme ci-dessous (avec un document Rmarkdown pour le rapport)

Code : Tout sélectionner

library(shiny)
library(rmarkdown)

ui <- fluidPage(
  titlePanel("Uploading Files"),
  sidebarLayout(
    sidebarPanel(
      fileInput(
        inputId = "file1", label = "Choose CSV File",
        multiple = FALSE,
        accept = c("text/csv", "text/comma-separated-values,text/plain", ".csv")
      ),
      radioButtons("format", "Document format", c("PDF", "HTML", "Word"), inline = TRUE)
    ),
    mainPanel(
      tableOutput("contents"),
      downloadButton("downloadReport")
    )
  )
)


server <- function(input, output) {
  dataset <- reactive({ # some computation on the uploaded file
    req(input$file1)
    read.csv(file = input$file1$datapath)
  })

  output$contents <- renderTable({ # print the first few rows of the files, not really needed though
    req(dataset())
    head(dataset())
  })

  output$downloadReport <- downloadHandler(
    filename = function() {
      paste("my-report", sep = ".", switch(
        input$format, PDF = "pdf", HTML = "html", Word = "docx"
      ))
    },

    content = function(file) {
      src <- normalizePath("report.Rmd")

      owd <- setwd(tempdir())
      on.exit(setwd(owd))
      file.copy(src, "report.Rmd", overwrite = TRUE)

      out <- render(
        input = "report.Rmd", 
        output_format 
= switch(input$formatPDF = pdf_document(), HTML = html_document(), Word = word_document()), 
        params 
= lis(data = dataset()) # need to set params in the Rmd file to use the uploaded dataset
      )
      file.rename(out, file)
    }
  )
}

shinyApp(ui, server
Mickaël
mickael.canouil.fr | rlille.fr

David Hacquard
Messages : 31
Enregistré le : 14 Mai 2020, 07:52

Re: Rapport Rmd pour utilisateurs ne maitrisant pas R

Messagepar David Hacquard » 16 Fév 2021, 09:56

Bonjour,

C'est tout à fait ça mais j'ai du mal à voir où insérer mon code permettant le traitement des données.
Merci

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Rapport Rmd pour utilisateurs ne maitrisant pas R

Messagepar Mickael Canouil » 16 Fév 2021, 11:40

J'ai légérement édité le code précédent.

Pour ce qui est du positionnement du code pour traiter les données, ça dépend de la structure de votre code.
Le traitement peut se faire, dans shiny au niveau du "reactive" lors de la lecture des données, ça peut se faire au niveau de l'environnement de compilation du rapport "downloadReport", voire même dans le document Rmarkdown lui-même.

Personnellement, si l'utilisation de shiny est simplement j'envoi un fichier, je reçois un document compilé (Rmarkdown), j'aurai tendance à tout mettre dans le document Rmarkdown, pour ne laisser que le strict nécessaire dans Shiny, c'est-à-dire juste l'interface.
Mickaël
mickael.canouil.fr | rlille.fr

David Hacquard
Messages : 31
Enregistré le : 14 Mai 2020, 07:52

Re: Rapport Rmd pour utilisateurs ne maitrisant pas R

Messagepar David Hacquard » 16 Fév 2021, 12:01

La petite subtilité désormais c'est comment dire à mon script que le jeu de données à traiter n'est plus celui que mon script Rmd allait chercher dans un répertoire mais celui qui est chargé sur l'interface Shiny....

Merci

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Rapport Rmd pour utilisateurs ne maitrisant pas R

Messagepar Pierre-Yves Berrard » 16 Fév 2021, 14:48

Pour cela, il faut que tu rendes ton fichier rmd paramétrable : dans l'en-tête yaml ajoute quelque chose du style :

Code : Tout sélectionner

---
...
params:
 emplacement_donnees: "chemin/vers/mon/fichier.csv"
---

Également dans le rmd, tu devras avoir quelque part :

Code : Tout sélectionner

read.csv(params$emplacement_donnees, ...)

Ensuite dans l'appli shiny, tu passes ce paramètre à rmarkdown::render :

Code : Tout sélectionner

rmarkdown::render(
    ...,
    params = list(emplacement_donnees = input$emplacement_donnees)
  )
 

Plus d'infos sur les rapports paramétrés : https://bookdown.org/yihui/rmarkdown-co ... ports.html
PY

David Hacquard
Messages : 31
Enregistré le : 14 Mai 2020, 07:52

Re: Rapport Rmd pour utilisateurs ne maitrisant pas R

Messagepar David Hacquard » 17 Fév 2021, 07:35

Dans le code fourni par Mickaël où faudrait-il insérer :

Code : Tout sélectionner

rmarkdown::render(
    ...,
    params = list(emplacement_donnees = input$emplacement_donnees)
  )
 


Merci

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Rapport Rmd pour utilisateurs ne maitrisant pas R

Messagepar Mickael Canouil » 17 Fév 2021, 08:02

Là où il y a déjà la même commande ;)
Mickaël
mickael.canouil.fr | rlille.fr

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Rapport Rmd pour utilisateurs ne maitrisant pas R

Messagepar Pierre-Yves Berrard » 17 Fév 2021, 08:04

À la toute fin : out <- render(...)
PY

David Hacquard
Messages : 31
Enregistré le : 14 Mai 2020, 07:52

Re: Rapport Rmd pour utilisateurs ne maitrisant pas R

Messagepar David Hacquard » 17 Fév 2021, 08:22

Voici le code erreur que j'obtiens :

Code : Tout sélectionner

Quitting from lines 75-77 (traitemant_bis_shiny.Rmd)

Warning: Error in read.table: 'file' doit être une chîne de caractères ou une connection
  [No stack trace available]


Les lignes 75-77 correspondent à :

Code : Tout sélectionner

donne<-read.csv2(params$emplacement_donnees, na.strings = ".", header = TRUE)


Qu'est-ce qui provoque cette erreur ?

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Rapport Rmd pour utilisateurs ne maitrisant pas R

Messagepar Mickael Canouil » 17 Fév 2021, 09:00

Il est impossible d'aider dans le cas présent.
Ce n'est pas du tout reproductible.

"params" est une liste interne à Rmarkdown.
Dans shiny, les principaux objets de type liste sont "input" et "output".
Mickaël
mickael.canouil.fr | rlille.fr

David Hacquard
Messages : 31
Enregistré le : 14 Mai 2020, 07:52

Re: Rapport Rmd pour utilisateurs ne maitrisant pas R

Messagepar David Hacquard » 17 Fév 2021, 14:09

Code : Tout sélectionner

---
...
params:
 emplacement_donnees: "chemin/vers/mon/fichier.csv"
---


Je ne comprends pas pourquoi mettre un chemin de fichier alors que le fichier en question est celui chargé sur Shiny?

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Rapport Rmd pour utilisateurs ne maitrisant pas R

Messagepar Mickael Canouil » 17 Fév 2021, 14:18

Le chemin est à mettre si la manutention des données a lieu dans le Rmarkdown.
Si celle-ci a lieu au niveau supérieur, c'est un jeu de donnée qui est fourni au Rmarkdown.

Là encore, tout est possible et faute d'indication de votre part, c'est à vous de choisir qu'elle approche vous convient.
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité