微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Shiny 中使用书签记录 DT 表中编辑的内容?

如何解决如何在 Shiny 中使用书签记录 DT 表中编辑的内容?

我有一个带有书签按钮和 ~/.bashrc 表的 Shiny 应用程序,允许用户编辑内容 (https://yuchenw.shinyapps.io/DT_Bookmark/)。但是,书签功能似乎无法记录DT表中编辑的内容

这是一个例子。我将第一行的汽车名称更改为“Mazda RX4 aaaaa”,然后单击“书签按钮”。它可以生成一个 URL。但是当我将 URL 复制并粘贴到新浏览器时,它显示了应用程序的原始状态。

有没有办法让书签功能起作用?这是代码

DT

解决方法

对数据表的最后修改在input$mDT_cell_edit中注册。
input$mDT_cell_edit 保存在书签状态,您可以使用 onRestore 恢复它。

但是,DT 中使用的完整数据不会保存:您可以使用 onBookmark to save it too
由于这超过了 url 允许的 2000 个字符,您需要使用 enableBookmarking = "server" 将书签存储在服务器上。

这是在下面的代码中所做的,以显示前进的方式。仅保存/恢复修改列表当然会更有效率。

library(shiny)
library(DT)

server <- function(input,output){
  
  rev <- reactiveValues(dat = mtcars)
  
  output$mDT <- renderDT(
    rev$dat,rownames = TRUE,selection = "none",editable = TRUE
  )
  
  dat_proxy <- dataTableProxy("mDT")
  
  observeEvent(input$mDT_cell_edit,{
    info <- input$mDT_cell_edit
    i <- info$row 
    j <- info$col
    if (j>0)  {
      rev$dat[i,j] <<- DT::coerceValue(info$value,rev$dat[i,j])} 
    else {
      row.names(rev$dat)[i] <- info$value
      }
      
    DT::replaceData(dat_proxy,rev$dat,resetPaging = FALSE,rownames = T)
  })
  
  onBookmark(function(state) {
    state$values$rev_dat <- rev$dat
  })
  
  # restore table selection and search
  onRestored(function(state) {
    
    if (!identical(rev$dat,state$values$rev_dat)) {
      rev$dat <- state$values$rev_dat    
      DT::replaceData(dat_proxy,state$values$rev_dat,rownames = T)
    }
  })
  
}

shinyApp(ui,server,enableBookmarking = "server")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。