版本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相同。
答案 0 :(得分:7)
我刚刚从模块中返回reactiveValues
并使用observe
:)找到答案!喔!
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)
}