闪亮:从模块获取输入
Shiny : get an input from a module
我正在尝试从模块获取输入到应用程序服务器。
这是我想要的示例,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 的内容并观察它。
您的代码有两个问题:1) 在 UI 中,您在服务器 "testm"
中调用模块实例 "t"
。这些必须相同。 2) Module returns 反应式;这需要在反应性上下文中进行评估: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 调用,模块 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})
}
我正在尝试从模块获取输入到应用程序服务器。
这是我想要的示例,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 的内容并观察它。
您的代码有两个问题:1) 在 UI 中,您在服务器 "testm"
中调用模块实例 "t"
。这些必须相同。 2) Module returns 反应式;这需要在反应性上下文中进行评估: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 调用,模块 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})
}