在下面的R Shiny代码中,我展示了用于模块化反应数据处理的示例代码。代码包含在两个独立的R文件中:一个是基础应用程序,另一个是链接到基础应用程序的模块应用程序。基本应用程序向一个单独的模块发送一个反应式数据帧(df()
)和用于乘以数据帧值的用户输入(输入$svc
。
请注意运行乘法计算的模块中的反应式data()
对象。我想将data()
对象发送到单独的R文件中的第二个模块,该文件运行单独的计算,例如向data
生成的每个数据帧单元添加值10,然后将这些结果发送回第一个模块,以便通过UI在第二个表中进行渲染。
如何做到这一点?
基本应用程序代码:
library(shiny)
library(DT)
source("C:/Users/User/Desktop/testModule1.R")
ui <- fluidPage(
mainPanel(
DTOutput("table"),
sliderInput("svc", , min = 0, max = 10, value = 1),
allocTbl_ui("tblModule")
)
)
server <- function(input, output) {
df <- data.frame(A = 1:3, B = 4:6, C = 7:9)
output$table <- renderDT({datatable(df)})
allocTbl_server(
"tblModule",
df = reactive(df),
svc = reactive(input$svc)
)
}
shinyApp(ui, server)
模块应用程序代码:
# Module file name: testModule1.R
allocTbl_ui <- function(id) {
ns <- NS(id)
DTOutput(ns("tbl"))
}
allocTbl_server <- function(id, df, svc) {
moduleServer(id, function(input, output, session) {
output$tbl <- renderDT({
data <- df() * as.numeric(svc())
datatable(data)
})
})
}