R Shiny,callModule 中的 DT::replaceData 不工作
R Shiny, DT::replaceData in callModule not working
在 R Shiny 应用程序中,我正在尝试使用 DT::replaceData
来更新数据以显示保留的当前状态(例如过滤)。
虽然它适用于一个简单的闪亮应用程序,但当我模块化应用程序并从 callModule
.
调用时它不会
在下面的示例中,在顶部框中选择物种应该会触发数据替换以显示在下方。
这是一个工作示例:
library(shiny)
ui <- fluidPage(
selectInput('species', 'Choose Species',
choices=unique(iris$Species),
selected=unique(iris$Species), multiple=TRUE),
DT::dataTableOutput('dt')
)
server <- function(input, output, session) {
output$dt <- DT::renderDataTable({
DT::datatable(
iris, filter='top',
options = list(autoWidth=TRUE)
)
})
observeEvent(is.null(input$species), {
DT::replaceData(
DT::dataTableProxy('dt'),
dplyr::filter(iris, Species %in% input$species)
)
})
}
shinyApp(ui, server)
这是无法正常工作的模块化版本:
library(shiny)
ui <- function(id) {
ns <- NS(id)
tagList(
selectInput(ns('species'), 'Choose Species',
choices=unique(iris$Species),
selected=unique(iris$Species), multiple=TRUE),
DT::dataTableOutput(ns('dt'))
)
}
server <- function(input, output, session) {
output$dt <- DT::renderDataTable({
DT::datatable(
iris, filter='top',
options = list(autoWidth=TRUE)
)
})
observeEvent(is.null(input$species), {
print(input$species)
DT::replaceData(
DT::dataTableProxy('dt'),
dplyr::filter(iris, Species %in% input$species)
)
})
}
mainUi <- fluidPage(ui('app'))
mainSrv <- function(input, output, session) {
callModule(server, 'app')
}
shinyApp(mainUi, mainSrv)
我想知道为什么第二个示例不起作用,如果可能的话如何修复它。
更新
已解决!
自 DT v0.3 以来已修复。
参见:https://github.com/rstudio/DT/issues/357
从v3.0开始已经解决。
参考:https://github.com/rstudio/DT/issues/357
所以,简单地解决了:
install.packages('DT')
packageVersion('DT')
# [1] ‘0.4’
在 R Shiny 应用程序中,我正在尝试使用 DT::replaceData
来更新数据以显示保留的当前状态(例如过滤)。
虽然它适用于一个简单的闪亮应用程序,但当我模块化应用程序并从 callModule
.
在下面的示例中,在顶部框中选择物种应该会触发数据替换以显示在下方。
这是一个工作示例:
library(shiny)
ui <- fluidPage(
selectInput('species', 'Choose Species',
choices=unique(iris$Species),
selected=unique(iris$Species), multiple=TRUE),
DT::dataTableOutput('dt')
)
server <- function(input, output, session) {
output$dt <- DT::renderDataTable({
DT::datatable(
iris, filter='top',
options = list(autoWidth=TRUE)
)
})
observeEvent(is.null(input$species), {
DT::replaceData(
DT::dataTableProxy('dt'),
dplyr::filter(iris, Species %in% input$species)
)
})
}
shinyApp(ui, server)
这是无法正常工作的模块化版本:
library(shiny)
ui <- function(id) {
ns <- NS(id)
tagList(
selectInput(ns('species'), 'Choose Species',
choices=unique(iris$Species),
selected=unique(iris$Species), multiple=TRUE),
DT::dataTableOutput(ns('dt'))
)
}
server <- function(input, output, session) {
output$dt <- DT::renderDataTable({
DT::datatable(
iris, filter='top',
options = list(autoWidth=TRUE)
)
})
observeEvent(is.null(input$species), {
print(input$species)
DT::replaceData(
DT::dataTableProxy('dt'),
dplyr::filter(iris, Species %in% input$species)
)
})
}
mainUi <- fluidPage(ui('app'))
mainSrv <- function(input, output, session) {
callModule(server, 'app')
}
shinyApp(mainUi, mainSrv)
我想知道为什么第二个示例不起作用,如果可能的话如何修复它。
更新
已解决!
自 DT v0.3 以来已修复。 参见:https://github.com/rstudio/DT/issues/357
从v3.0开始已经解决。 参考:https://github.com/rstudio/DT/issues/357
所以,简单地解决了:
install.packages('DT')
packageVersion('DT')
# [1] ‘0.4’