Вы можете найти введение в блестящие модули здесь . В любом случае я бы собрал модуль с пустой функцией пользовательского интерфейса и включил бы ваш код, который многократно выполняется на стороне сервера модулей. Я приведу вам короткий пример использования модуля:
Поэтому я настроил один и тот же модуль (который показывает график) дважды. С помощью кнопки в основной части пользовательского интерфейса вы можете переключать график внутри модулей.
library(shiny)
library(ggplot2)
# module part
moduleUI <- function(id) {
ns <- NS(id)
# module UI things
plotOutput(ns("module_plt"))
}
module <- function(input, output, session, plt_toggle) {
# the module server side
output$module_plt <- renderPlot({
if(plt_toggle$show_plt1) {
ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) + geom_point()
} else {
ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) + geom_line()
}
})
}
# main ui
ui <- shinyUI(
fluidPage(
fluidRow(actionButton("switch_plt", "Switch Plot")),
# call the module ui
column(width=6, moduleUI("moduleID1")),
column(width=6, moduleUI("moduleID2"))
)
)
server <- shinyServer(function(input, output, session) {
# initialize default plt
plt_toggle <- reactiveValues(show_plt1=T, show_plt2=F)
# which plt is active
observeEvent(input$switch_plt, {
if(plt_toggle$show_plt1){
plt_toggle$show_plt1 <- F
plt_toggle$show_plt2 <- T
} else {
plt_toggle$show_plt1 <- T
plt_toggle$show_plt2 <- F
}
})
# add the modules
callModule(module, "moduleID1", plt_toggle)
callModule(module, "moduleID2", plt_toggle)
})
shinyApp(ui, server)
В вашем случае вам необходимо передать значения reactive
, необходимые в модуле, функции сервера модуля , Я рекомендую source
, чтобы модуль работал в отдельных файлах, чтобы ваш код был чистым.