Как отобразить график с учетом обновления с помощью switch ()? - PullRequest
0 голосов
/ 26 июня 2019

Поэтому я пытаюсь создать блестящее приложение для визуализации некоторых вероятностных функций. У меня есть старая версия (которая работает) с очень тяжелым кодом, и теперь я хочу обновить ее, используя функции переключения. Но мой сюжет, кажется, не очень хорошо реагирует на это.

Я пытался использовать функцию req () для принудительного обновления данных. Но потом я подумал, что, возможно, проблема в том, что я просто не могу использовать одно и то же имя для графика на двух панелях.

ui <- dashboardPage(
    dashboardHeader(title = "probability laws"),
    dashboardSidebar(
        sidebarMenu(id='menus',
                    menuItem(text = "Plotting some densities" , icon = icon("atlas"),tabName = "density"),
                    menuItem(text = "repartition functions", icon = icon("cog", lib = 'glyphicon'),tabName = "repartition")
        )
    ),
    dashboardBody(
        tabItems(
            tabItem("density",
                    fluidRow(
                        tabsetPanel(id = 'tabs',
                                    tabPanel(title='uniforme',value='unif',fluidRow(
                                        column(8, plotOutput('graphe')),
                                        column(3,wellPanel(
                                            sliderInput(inputId = "inf",label = "borne inf",min = -10,max = 10,value = 0,step = 0.2),br(),
                                            sliderInput(inputId = "sup",label = "borne sup",min = -10,max = 10,value = 1,step = 0.2),br())
                                    ))),
                                    tabPanel(title='normale',value='norm',fluidRow(
                                        column(8, plotOutput('graphe')),
                                        column(3,wellPanel(
                                            sliderInput(inputId = "mu",label = "mean",min = -10,max = 10,value = 0,step = 0.2),br(),
                                            sliderInput(inputId = "var",label = "variance",min = 0,max = 10,value = 1,step = 0.2),br())
                                        )))

                    )
            )))))

А на сервере:


server <- function(input, output,session) {

    x <- reactive({switch (input$tabs,
                           'unif' = seq(-10,10,0.1),
                           'norm' = seq(-10,10,0.1)
    )})

    data <- reactive({switch(input$tabs,
                                   'unif' = dunif(x(),0,1),
                                   'norm' = dnorm(x(),0,1)
                                    )})

    data2 <- reactive({switch(input$tabs,
                              'unif' = dunif(x(),min(input$inf, input$sup),max(input$inf,input$sup)),
                              'norm' = dnorm(x(), input$mu, sqrt(input$var)) 
     )})

    output$graphe <- renderPlot({df <- melt(data.frame(x(),data(),data2()), id='x..')
                                 ggplot(data=df, aes(x=x.., y=value, colour=variable)) + geom_line() + xlim(-10,10) + ylim(0,1) + theme(legend.position = 'none')
                                })

}

Дело в том, что R не находит никаких ошибок, и если я просто оставлю часть unif, то это сработает. Но когда я добавляю обычную панель распределения, у меня остается пустое место. Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 26 июня 2019

Итак, с помощью некоторых исследований я решил эту проблему, используя graphe1 и graph2, например:

output$graphe1 <- output$graphe2 <- renderPlot(...)

Спасибо @ Stéphane_Laurent за то, что указали, где была ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...