Shiny:从模块获取输入
问题描述:
我试图从模块获取输入到应用服务器。Shiny:从模块获取输入
这里是我想要的一个例子中,app.R:
library(shiny)
source("test.R")
ui <- fluidPage(
tabPanel("tt", testUI("t"))
)
server <- function(input, output) {
ret <- callModule(test, "testm")
print(ret)
}
shinyApp(ui = ui, server = server)
测试模块:
testUI <- function(id) {
ns <- NS(id)
tabPanel(NULL,
textInput(ns("textInput1"), label = h5(""), value = "")
)}
test <- function(input, output, session, data) {
reactive({input$textInput1})
}
我想从应用程序的服务器功能打印textInput1的内容.R并观察它。
答
您的代码有两个问题:1)在UI中,您调用模块实例"t"
,在服务器"testm"
中。这些需要相同。 2)模块返回一个反应;这需要在被动环境中进行评估:reactive
,observe
或render
。
library(shiny)
source("test.R")
ui <- fluidPage(
tabPanel("tt", testUI("testm"))
)
server <- function(input, output) {
ret <- callModule(test, "testm")
observe(print(ret()))
}
shinyApp(ui = ui, server = server)
答
上面的解决方案解决了我提供的示例中的问题。
但是,我不解决它为我的应用程序:
我我的应用我有app.R,一个module1.R和module2.R该模块2是这是自己调用由模块1电话app.R.我想从module1函数中打印'textInput1'的值。
app.R:
library(shiny)
source("module1.R")
ui <- fluidPage(
tabPanel("Module 1", module1UI("module1"))
)
server <- function(input, output) {
callModule(module1, "module1")
}
shinyApp(ui = ui, server = server)
module1.R:
source("module2.R")
module1UI <- function(id) {
ns <- NS(id)
tabPanel(NULL,
tabPanel("Module 2", module2UI("module2"))
)}
module1 <- function(input, output, session, data) {
reactive({input$textInput1})
ret <- callModule(module2, "module2")
observe(print(ret()))
}
module2.R:
module2UI <- function(id) {
ns <- NS(id)
tabPanel(NULL,
textInput(ns("textInput1"), label = h5(""), value = "")
)}
module2 <- function(input, output, session, data) {
reactive({input$textInput1})
}
坦克您的回复,现在的作品! – Grundoc