我试图从模块获取输入到应用服务器。
这是我想要的一个例子,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})
}
我想从app.R的服务器函数中打印textInput1的内容并观察它。
答案 0 :(得分:0)
您的代码存在两个问题: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)
答案 1 :(得分:-2)
上述解决方案解决了我提供的示例的问题。
但是,我没有为我的应用解决它:
我的应用程序我有app.R,module1.R和module2.R模块2由module1调用,这是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})
}