【发布时间】: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 相同。
【问题讨论】: