闪亮:从模块获取输入

时间:2017-09-05 12:28:08

标签: r module shiny reactive

我试图从模块获取输入到应用服务器。

这是我想要的一个例子,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的内容并观察它。

2 个答案:

答案 0 :(得分:0)

您的代码存在两个问题:1)在UI中,您在服务器"t"中调用模块实例"testm"。这些必须相同。 2)模块返回被动;这需要在反应性环境中进行评估:reactiveobserverender

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})
}