Я пытаюсь создать блестящий модуль для представления данных из информационных кадров с помощью пакета DT. Я хотел бы использовать модуль для стандартной настройки опций DT-таблицы, таких как language и др.
Я хочу, чтобы пользователь мог интерактивно выбирать различные подмножества данных и после этого иметь возможность просматривать данные в виде таблицы DT. Выбор подмножества будет сгенерирован вне модуля, потому что я хотел бы, чтобы подмножество было доступно для других целей, например, для экспорта в csv-файл.
Это работает как задумано, когда я не использую модуль для создания таблицы DT. Когда я помещаю код в модуль, при запуске приложения создается таблица. Но при изменении критериев выбора таблица не обновляется.
Я включил приложение, иллюстрирующее проблему. Таблица 1 генерируется без использования блестящего модуля и обновляется, как ожидается, при изменении выбора. Таблица 2 выводится с использованием модуля и не обновляется при изменении выбора.
Я использую R-studio 1.1.463, R версии 3.5.2 и DT версии 0.5.
require("DT")
require("shiny")
# module for presenting data using DT
showDTdataUI <- function(id) {
ns <- NS(id)
tagList(
DT::dataTableOutput(ns("table"))
)
}
showDTdata <- function(input, output, session, DTdata) {
output$table <- renderDataTable({
DT::datatable(DTdata)
})
}
# User interface
ui <-
fluidPage(
sidebarLayout(
sidebarPanel(id="DT",
width = 4,
helpText(h4("Select")),
selectInput("selectedSpecies", label = "Species",
choices = c("setosa","versicolor","virginica"),
selected = "versicolor")
),
mainPanel(
h3("Table 1. Presenting selected data from Iris" ),
DT::dataTableOutput("table"),
h5(br("")),
h3("Table 2. Presenting selected data from Iris using shiny module"),
showDTdataUI(id="testDTModule")
)
)
)
# Define server logic ----
server <- function(session, input, output) {
selectedIris <- reactive ( {
selected <- iris[which(iris$Species==input$selectedSpecies),]
selected
})
output$table <- renderDataTable({
DT::datatable(selectedIris())
})
callModule(showDTdata, id="testDTModule", DTdata=selectedIris())
}
# Run the app ----
shinyApp(ui = ui, server = server)