【问题标题】:How to store the returned value from a Shiny module in reactiveValues?如何将 Shiny 模块的返回值存储在 reactiveValues 中?
【发布时间】:2018-02-20 09:59:01
【问题描述】:

版本 1 下面是一个玩具模块,它要求用户输入 txt,并将输入返回给 Shiny 主应用程序。然后,Shiny 主应用程序渲染文本并将其输出到屏幕。

这里我将模块的返回值存储在一个名为mytxt的变量中,并通过renderText({ mytxt() })调用它。


但是,我真正想做的是将返回的值存储到主 Shiny 应用程序中的 reactiveValues 中。 (我是否输出它并不重要,因为我想对该值进行进一步评估。)但遗憾的是,我没有办法让它工作。我在下面的版本 2 中显示了我的失败代码。


版本 1(正确)

app.R

library(shiny)
source("module_1.R")

ui <- fluidPage(

  returnUI("returntxt"),
  textOutput("mytxt")

)

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

  mytxt <- callModule(returnServer, "returntxt")

  output$mytxt <- renderText({ mytxt() })

}

shinyApp(ui, server)

module_1.R

returnUI = function(id) {
  ns <- NS(id)

  tagList(
    textInput(ns("txt"), "Write something")
  )
}


returnServer = function(input, output, session) {
  mytxt <- reactive({
    input$txt
  })

  return(mytxt)
}

第 2 版(需要帮助!)

app.R

library(shiny)
source("modules/module_1.R")

ui <- fluidPage(

  returnUI("returntxt"),
  textOutput("mytxt")

)

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

  myvals <- reactiveValues(
    txt = NULL
  )

  mytxt <- callModule(returnServer, "returntxt")

  myvals$txt <- isolate(mytxt())

  output$mytxt <- renderText({ myvals$txt })

}

shinyApp(ui, server)

module.R 与版本 1 相同。

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    我刚刚通过从模块返回 reactiveValues 并使用 observe 找到了答案 :) Woohoo!

    app.R

    library(shiny)
    source("modules/module_1.R")
    
    ui <- fluidPage(
    
      returnUI("returntxt"),
      textOutput("mytxt")
    
    )
    
    server <- function(input, output, session) {
    
      myvals <- reactiveValues(
        txt = NULL
      )
    
      mytxt <- callModule(returnServer, "returntxt")
    
      observe({ 
        myvals$txt <- mytxt$txt 
        print(myvals$txt)
      })
    
      output$mytxt <- renderText({ myvals$txt })
    
    }
    
    shinyApp(ui, server)
    

    module_1.R

    returnUI = function(id) {
      ns <- NS(id)
    
      tagList(
        textInput(ns("txt"), "Write something")
      )
    }
    
    returnServer = function(input, output, session) {
      myreturn <- reactiveValues()
    
      observe({ myreturn$txt <- input$txt })
    
      return(myreturn)
    }
    

    【讨论】:

    • 嗨!如何将此 vlaues 加载到我的 globalenv 中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 2013-02-07
    • 2017-01-07
    相关资源
    最近更新 更多