#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. Это сделало это! Большое вам спасибо!