更新闪亮应用程序中的数据而不刷新整个应用程序

dan*_*kas 5 r shiny googlevis dt

我有一个使用R shiny库构建实时数据可视化的应用程序.我使用reactivePoll函数定期从文件重新加载数据.我不喜欢这样的,每当数据重新加载时,整个应用程序都会刷新.

因此,例如,如果我有DT选择的表输出,并且我使用此选择,input$table_rows_selected它将重置为NULL数据重新加载,这完全不是用户友好的.

是否总体可以在不中断用户的情况下更改数据输出?

UPDATE.

这可以用任何其他包显示表 - googleVis或其他?

工作实例.

library(shiny)
library(DT)

runApp(shinyApp(
  ui = fluidPage(dataTableOutput('table')),
  server = function(input, output, session) {
    pollData <- reactivePoll(4000, session,
                             checkFunc = function(){ Sys.time() },
                             valueFunc = function(){ data.frame(id = sample(letters[1:3]), a = runif(3), b = runif(3), c = runif(3)) })
    output$table <- renderDataTable({pollData()})
    proxy <- dataTableProxy('table')
    observeEvent(pollData(), {
      selectRows(proxy, input$table_rows_selected)
    })}
))
Run Code Online (Sandbox Code Playgroud)

我从@NicE回答了这个例子并添加了id列.关键是,当行由行号标识时,如果需要选择某行,则@NicE答案是可以的.

现在假设当某行由某个id值标识时,我需要选择一行.也就是说,如果我选择id等于b的行,那么下次数据重新加载时我希望选择具有相同id值的行.

Nic*_*icE 8

dataTableProxypollData更新后创建datable时,可以使用a 来选择行.这是一个例子,数据帧每4秒刷新一次:

library(shiny)
library(DT)

ui <- fluidPage(dataTableOutput("table"))

server <- function(input,output,session){
        values <- reactiveValues()
        pollData <- reactivePoll(4000, session,
                                 checkFunc=function(){
                                         Sys.time()
                                 },
                                 valueFunc=function(){                             
                                         data.frame(a=sample(c("a","b","c"),3),b=runif(3),c=runif(3),stringsAsFactors = F)
                                 })

        output$table <- renderDataTable({ pollData()})

        observe({
                values$selected <- pollData()$a[input$table_rows_selected]
        })

        proxy = dataTableProxy('table')
        observeEvent(pollData(),{
                selectRows(proxy, which(pollData()$a %in% values$selected))
        })
}

shinyApp(ui,server)
Run Code Online (Sandbox Code Playgroud)

更新:在上面的代码中,当数据更改时,所选行是与先前具有相同第一列的行.

  • 请注意,这需要`DT`的开发版本,因为`dataTableProxy`命令在发行版中不可用.你需要`devtools :: install_github('rstudio/DT')` (3认同)