Я делаю блестящее приложение, в котором есть уникальная таблица и множество входных данных для изменения этой таблицы. Поскольку почти все эти входные данные являются независимыми, и я могу классифицировать их по категориям, я создал несколько модулей, каждый из которых содержит несколько входных данных.
Однако, поскольку у меня есть одна таблица для рендеринга (то есть только одна tableOutput
) и так как я хотел бы, чтобы на эту таблицу влияли все модули, я не помещал ее в конкретный модуль пользовательского интерфейса, но я поместил один renderTable
на server
модуль.
Это небольшой пример, воспроизводящий мою ситуацию:
library(shiny)
mod_select_ui <- function(id){
ns <- NS(id)
tagList(
selectInput(ns("test_select"), "choose among mtcars", names(mtcars))
)
}
mod_select_server <- function(input, output, session){
output$test_mtcars <- renderTable({
mtcars[[input$test_select]]
})
}
mod_checkbox_ui <- function(id){
ns <- NS(id)
tagList(
checkboxInput(ns("test_checkbox"), "only head of data")
)
}
mod_checkbox_server <- function(input, output, session){
observe({
if(input$test_checkbox){
output$test_mtcars <- renderTable({
head(mtcars)
})
}
})
}
ui <- fluidPage(
mod_checkbox_ui("1"),
mod_select_ui("1"),
tableOutput("test_mtcars")
)
server <- function(input, output, session) {
callModule(mod_select_server, "1")
callModule(mod_checkbox_server, "1")
}
shinyApp(ui, server)
В этом примере есть несколько проблем. Во-первых, ничего не отображается, потому что output$test_mtcars
находится в server
модулях, и, следовательно, ожидается, что в модуле пользовательского интерфейса будет иметься дополнительный tableOutput
. Во-вторых, я не уверен, что оба renderTable
будут приняты во внимание.
Можно ли модифицировать этот единственный tableOutput
несколькими модулями? Объединение различных модулей пользовательского интерфейса вместе не возможно (я разделил входы в модулях именно потому, что их у меня много).
Также задан вопрос в сообществе RStudio