J'utilise une interface shiny simple :
un département ou région à sélectionner et un bouton pour lancer l’édition de rapport conditionnellement à la sélection.
Dans le lancement de l’édition de rapport il y un rmd qui est appelé, celui-ci fait appelle à des fonctions qui ont été sourcées plus tôt dans le processus.
Quand dans une fonction (appelée via le rmd) doit utiliser une variable créée dans le rmd (sans l'avoir passée en paramètre) le shiny indique une erreur comme quoi il ne la trouve pas. Cependant quand je test le rmd tout seul (via render) cela fonctionne très bien.
Je pense qu'un petit exemple sera le bienvenu : (j'ai pris un shiny de base et idem pour le rmd)
PARTIE SHINY :
Code : Tout sélectionner
library(shiny)
ui <- fluidPage(
tags$head(tags$script(src = "message-handler.js")),
actionButton("do", "Click Me")
)
server <- function(input, output, session) {
observeEvent(input$do, {
rmarkdown::render("xxxxxxxxxxxxxxxxxxxxxxxxxx / simple_xpl.Rmd", # remplacer les xx par votre repertoire de test
output_file = paste0('report_example',
'.docx'))
})
}
shinyApp(ui, server)
PARTIE RMD :
Code : Tout sélectionner
---
title: "simple_xpl"
author: "Jérémy Jachacz"
date: "20/08/2020"
output: word_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r cars}
## variable créée dans le rmarkdown
max_speed<-max(cars$speed,na.rm = T)
summary(cars)
```
## Including Plots
You can also embed plots, for example:
```{r pressure, echo=FALSE}
print(max_speed)
plot(pressure)
```
```{r max_speed_transformation, echo=FALSE}
res<-export_max_speed()
max_speed_by_fct<-res[1]
max_speed_tr_by_fct<-res[2]
```
la vitesse max obtenue par la fonction est : `r max_speed_by_fct`
la vitesse max transformée par la fonction est : `r max_speed_tr_by_fct`
ANNEXE :
Code : Tout sélectionner
export_max_speed<-function(){
# exemple en parallele du pb
max_speed_exp<-max(cars$speed,na.rm = T)
# variable créee dans le rmd mais pas passée en paramètre
max_speed_tr<-max_speed+10
list(max_speed_exp,max_speed_tr)
}
rmarkdown::render("xxxxxxxxxxxxxxxxxxxxxxxxxx / simple_xpl.Rmd", # remplacer les xx par votre repertoire de test
output_file = paste0('report_example',
'.docx'))
Les deux test à faire sont :
Test 1 avec shiny :
Dans l'environnement seulement ui, server et export_speed_max doivent être présent.
lancer l'app shiny..
Test 2 sans shiny :
Environnement identique au test 1, lancer le rmd via render (code annexe)
Une solution est dans le 2eme chunk quand je declare max_speed, d'utiliser "<<-" et cela fonctionne mais je comprends pas bien pourquoi ?
Une autre solution est de mettre ces petites variables indépendante dans la fonction, de les exporter mais le problème c'est que je les ai laissé en dehors car j'en ai besoin à plusieurs endroit dans le rmd, il faudrait que je les passe en paramètre de chaque fonction qui en a besoin.. ça me parait pas "optimal"
En espérant avoir été clair.
Merci