Как вы используете реактивный параметр в блестящем модуле?

#r #module #shiny

#r #модуль #блестящий

Вопрос:

У меня есть страница shiny dashboard с несколькими графиками, на которых я хотел бы использовать общий селектор дат, но поместить графики в отдельные модули.

Я понимаю, что когда я использую callModule это, мне нужно передавать объект, используя реактивный per

Если модулю необходимо получить доступ к входным данным, которые не являются частью модуля, содержащее приложение должно передать входное значение, заключенное в реактивное выражение (т.е. реактивное (…)):

callModule(myModule, "myModule1", reactive(input$checkbox1))

но я не понимаю, что делать с другой стороны.

в пользовательском интерфейсе:

 graphRoFCUI("RoFCNameSpace"),
dateRangeInput("dateRange", "Select Date Range:"
                             , start = max("2016-6-27", Sys.Date()-366)
                             , end = Sys.Date()
                             , min = "2016-6-27"
                             , max = Sys.Date()
            )
  

на сервере:

callModule(graphRoFC, id = "RoFCNameSpace", conn, reactive(input$dateRange))

В моем модуле.R:

 graphRoFCUI <- function(id) {
  ns <- NS(id)
  plotlyOutput(outputId = ns("RoFCOverTime"))
}

...
graphRoFC <- function(input, output, session, conn, dateRange) {
  limitDateRangePercentRoFCDF <- reactive({
    PercentRoFCDF.dateLimited <- subset(PercentRoFCDF, TicketLocalCreatedDate > dateRange[1] amp; TicketLocalCreatedDate < dateRange[2])
    return(PercentRoFCDF.dateLimited)
  })

...
}
  

Что я получаю:

 Warning: Error in $: object of type 'closure' is not subsettable
Stack trace (innermost first):
    80: as.Date
    79: ggplotly [sdesc.R#43]
    78: func
    77: origRenderFunc
    76: output$RoFCNameSpace-RoFCOverTime
     1: runApp
  

Ответ №1:

Трудно сказать наверняка, не глядя на полный воспроизводимый код. Но всякий раз, когда у вас возникает ошибка object of type 'closure' is not subsettable , это почти всегда означает, что у вас есть реактивный объект, для которого вы не смогли использовать () . Я предполагаю, что вам нужно изменить эту строку:


PercentRoFCDF.dateLimited <- subset(PercentRoFCDF, TicketLocalCreatedDate > dateRange[1] amp; TicketLocalCreatedDate < dateRange[2])

Для
PercentRoFCDF.dateLimited <- subset(PercentRoFCDF, TicketLocalCreatedDate > dateRange()[1] amp; TicketLocalCreatedDate < dateRange()[2])

Комментарии:

1. Это сделало это! Большое вам спасибо!