如何将其转换为闪亮模块

时间:2017-07-14 09:16:42

标签: r shiny

您能提供使用renderUI的模块化闪亮代码的MWE吗?我想举个例子。

这里有一个很好的教程讨论:https://shiny.rstudio.com/articles/modules.html但是,它没有说明如何在ui和服务器中集成renderUI组件的模块化。

这是我到目前为止所尝试的内容:

在我的ui代码中,我有:

  htmlOutput("selectionUI")

在我的服务器代码中,我有:

  output$selectionUI <- renderUI({
    req(input$Filter)
    selectInput(
      inputId = "Selection",
      label = "Selection",
      choices = get("qlist", envir = get(input$source))[[input$Filter]]$responses)
  })

现在我想模块化这是因为它是一个有时重复的元素,但我不知道如果我完成后如何将它插入到我的ui / server代码中。

这是我尝试过的:

selectionChooserUI <- function(id) {
  ns <- NS(id)
  uiOutput(ns('controls'))
}

selectionChooser <- function(input, output, session, data, sourcedata, filter) {
  output$selectionUI <- renderUI({
    req(input$Filter)
    ns <- session$ns
    selectInput(
      inputId = ns('Selection'),
      label = 'Selection',
      choices = get('qlist', envir = get(input[[sourcedata()]]))[[input[[filter()]]]]$responses
    )
  })
}

我需要将哪些内容添加到我的ui代码才能显示,目前我收到的投诉是"output" is missing with no default

我现在用我的ui代码调用它,使用:

selectionChooserUI("selection")

1 个答案:

答案 0 :(得分:2)

可能是这样的。我没有测试它,因为我没有你的数据..

library(shiny)

ui <- fluidPage(
  h1("Get me a Module!"),
  selectInput("source", "Some source", choices = letters[1:4]),
  selectInput("filter", "Some filter", choices = letters[1:4]),
  selectionChooserUI("id_of_me")
)

server <- function(input, output, session) {
  get_me_choices <- reactive({
    get("qlist", envir = get(req(input$source)))[[req(input$filter)]]$responses })

  callModule(module = selectionChooser, id = "id_of_me", choices = get_me_choices)
}

selectionChooserUI <- function(id) {
  ns <- NS(id)
  uiOutput(ns('selection'))
}

selectionChooser <- function(input, output, session, choices) {
  ns <- session$ns

  output$selection <- renderUI({
    selectInput(
      inputId = ns('selection'),
      label = 'Selection',
      choices = choices
    )
  })
}