Bonjour,

Je souhaiterais avoir votre avis sur un exemple de programme R Shiny utilisant les menus.

server
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
library(shiny)
library(shinydashboard)
 
shinyServer <- function(input, output) {
 
  mydata<-eventReactive(input$go,{
    x<-input$x
    var1<-seq(0,x,0.5)
    var2<-3*var1+2
    var3<-0.5*var1^2
 
    list(var1=var1,var2=var2,var3=var3)    
  })
 
  output$graph1<-renderPlot({
    data<-mydata()
    var1<-data$var1
    var2<-data$var2
    plot(var1,var2,col=2)
  })
 
  output$graph2<-renderPlot({
    data<-mydata()
    var1<-data$var1
    var3<-data$var3
    plot(var1,var3,col=3)
  })
 
}
ui
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
#install.packages("shinydashboard")
library(shinydashboard)
 
shinyUI <- dashboardPage(  
  dashboardHeader(title="test"),
  dashboardSidebar(    
    sidebarMenu(      
      menuItem("var2", tabName = "menu1", icon = icon("dashboard")),
      menuItem("var3", tabName = "menu2", icon = icon("th"))      
    )    
  ),  
  dashboardBody(    
    tabItems(      
      tabItem(tabName = "menu1",
              fluidRow(
                box(
                  title="Parametre",
                  numericInput("x", "x : ", 60, min = 0),
                  actionButton("go","Go")
                ),
                box(
                  plotOutput("graph1")
                )
              )
      ),
      tabItem(tabName = "menu2",
              fluidRow(
                box(
                  title="Parametre",
                  numericInput("x", "x : ", 60, min = 0),
                  actionButton("go","Go")
                ),
                box(
                  plotOutput("graph2")
                )
              )
      )
    )
  )
)
Pour la partie "server", je pense que ça ne convient pas. Il faudrait diviser le code pour pour chacun des menus. Comment y procède-t-on ?
Par exemple, une fois l'application ouvert, si on se dirige directement dans le menu 2 et qu'on lance le programme, rien ne s'exécute... Mais j'aimerais également que le programme concernant chaque menu ne soit pas exécuté tant qu'on y a pas été.

Merci pour vos retours.

Aleksik