R Shiny,在调用模块中的DT :: replaceData不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R Shiny,在调用模块中的DT :: replaceData不起作用相关的知识,希望对你有一定的参考价值。

在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)

我想知道为什么第二个例子不起作用,以及如果可能的话如何修复它。


Update

解决了!

自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不起作用的主要内容,如果未能解决你的问题,请参考以下文章

r 在Shiny中设置DT :: datatable中的水平滚动

Shiny 和 R 中的 DT:自定义数字格式

r 在Shiny中使用DT数据表中的图标

R Shiny DT - 使用反应式编辑表中的值

更新 R Shiny 中的 DT 列过滤器选择

如何使用 R Shiny 中的 DT 包格式化数据表输入?