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'essaye de passer par Shiny en espérant faire une interface qui charge un jeu de données et réaliserait mon script automatiquement mais je n'arrive pas à faire le lien entre Shiny et mon Rmd.

Comment dire à mon Rmd 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 ?

Voici mon script "Shiny" avec le nom de mon Rmd "traitemant_bis_shiny.Rmd" :


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
 
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({
    req(input$file1)
    read.csv(file = input$file1$datapath,
             na.strings = ".", 
             sep = ";",
             header = TRUE,
             nrows=10)                 #affiche que 10 lignes
  })
 
  output$contents <- renderTable({
    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("traitemant_bis_shiny.Rmd")
 
      owd <- setwd(tempdir())
      on.exit(setwd(owd))
      file.copy(src, "traitemant_bis_shiny.Rmd", overwrite = TRUE)
 
      out <- render("traitemant_bis_shiny.Rmd", switch(
        input$format,
        PDF = pdf_document(), HTML = html_document(), Word = word_document()
      ))
      file.rename(out, file)
    }
  )
}
 
shinyApp(ui, server)

L'interface fonctionne, le jeu de données parvient à être chargé mais le lien entre mon script Rmd et le jeu de données ne semble pas fonctionner...

Je suis pas vraiment familier avec Shiny, donc si vous avez des idées je suis preneur.

Merci