Создание модулей в Shiny: связывание checkboxInputs из module.R для наблюдения событий в app.R - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь создать модуль, содержащий menuItems и checkboxInputs в скрипте module.R, и связать эти входы с наблюдаемыми событиями в приложении. R

Буду благодарен за любые предложения, поскольку после широкого поискав Интернете я получаю следующую ошибку:

ОШИБКА: невозможно принудительно привести тип 'замыкание' к вектору типа 'символ'

Это мой файл module.R:

library(modules)
library(shiny)
library(shinydashboard)

dashboardSidebarUI2 <- function(id) {
  ns <- NS(id)
     tagList( 

checkboxInput(inputId = ns("pow_id"), label = "Power plants (all)", value = FALSE)

    )

     setup<-function(input,output,session,sel){
       sel<-reactive({input$pow_id})
       return(sel)
     }

}

Соответствующая часть в app.R:

library(modules)
library(shiny)
library(shinydashboard)

source("module.R"),
  dashboardSidebar(
    width = 310,
    sidebarMenu(

dashboardSidebarUI2("sel"), 

               )
  )



После дальнейших исследований я обнаружил, что работает следующий код:

In module.R:

dashboardSidebarUI2 <- function(id) {
  ns <- NS(id)
     tagList( 
              checkboxInput(inputId = ns("pow_id"), label = "Power plants (all)", value = FALSE)

    )
}     

  setup<-function(input,output,session){

   reactive({input$pow_id})
}

In app.R:

source("module.R"),

  dashboardSidebar(
    width = 310,
    sidebarMenu(

dashboardSidebarUI2("basic"), 

               )
  )


server <- function(input, output, session) {
  pow_id <- callModule(setup,"basic")


observeEvent(pow_id(), {
  ib <- pow_id()

Потребовалось время, чтобы разобраться в этом.Эти ресурсы, которые я нашел особенно полезными: https://itsalocke.com/blog/shiny-module-design-patterns-pass-module-inputs-to-other-modules/ https://github.com/rstudio/webinars/blob/master/19-Understanding-modules/01-Modules-Webinar.pdf

Однако, если было бы полезно узнать, существует ли более правильный / альтернативный метод.

Спасибо.

...