R Shiny: Как сохранить возвращаемое значение из модуля? - PullRequest
1 голос
/ 27 апреля 2019

У меня есть простой блестящий модуль, где я хочу получить сумму от двух ползунковых входов:

Коды модулей:

Модуль

custSliderGroupInput <- function(id,slider1Name,slider2Name){
    ns <- NS(id)
    tagList(sliderInput(ns("slider1"),slider1Name,1,100,50),
            sliderInput(ns("slider2"),slider2Name,1,20,10))
}

custSliderGroup <- function(input,output,session){
    rv <- reactiveVal()
    observeEvent(c(input$slider1,input$slider2),{
        rv <- reactive({input$slider1 + input$slider2})
        print(rv())
        return(list(result = rv()))
    })
}

В моем app.R я хочу отобразить результат при использовании textOutput, но он не работает и не отображается ошибка. (хотя значение выводится на консоль.)

App

library(shiny)
ui <- fluidPage(
        custSliderGroupInput("myslider","A","B"),
        textOutput("text")
    )


server <- function(input, output,session){
    output$text <- renderText({
        callModule(custSliderGroup,"myslider")$result
    })
}

shinyApp(ui = ui, server = server)

Я искал в Google и StackOverflow, но все решения просто не работают.

Сообщение печатается в консоли:
The message does get printed in the console

Но на интерфейсе ничего не отображается:
enter image description here

1 Ответ

0 голосов
/ 27 апреля 2019

Я как-то решил это следующим образом:

Модуль :

custSliderGroupInput <- function(id,slider1Name,slider2Name){
    ns <- NS(id)
    tagList(sliderInput(ns("slider1"),slider1Name,1,100,50),
            sliderInput(ns("slider2"),slider2Name,1,20,10))
}

custSliderGroup <- function(input,output,session){
    rv <- input$slider1 + input$slider2
    return(rv)
}

Приложение

ui <- fluidPage(
        custSliderGroupInput("myslider","A","B"),
        textOutput("text")
    )


server <- function(input, output,session){
    output$text <- renderText({
        callModule(custSliderGroup,"myslider")
    })
}

shinyApp(ui = ui, server = server)

Я не знаю почему, но кажется, что использование таких функций, как reactive() или observeEvent(), делает среду модуля слишком сложной и приносит больше вреда, чем пользы.Это просто работает, упрощая коды.Если кто-то знает, как это теоретически работает или не работает, пожалуйста, напишите свой ответ!

Большое спасибо!

...