闪亮 DT::datatable - 选中行时更改 table 内容

Shiny DT::datatable - Change table content when lines are selected

在数据table 中,某些值应该根据相应行是否被 select 编辑而改变。让我头疼的是以下内容:更新数据时 table 被重新写入,并且 selection 消失了。

我已经为这个挑战努力了几个小时,但还没有找到解决方案。大多数时候我在 Whosebug 上找到解决问题的方法,但这次我没有。

在下面的示例中,最后一列应该显示该行的 select离子状态。我试图跟踪 selected 行并在重写 table 时预先 select 它们。但是我不知道如何让它工作;代码不起作用,但(希望)显示我需要的东西。

library(shiny)
library(DT)
mymtcars = mtcars[1:5, 1:2]

runApp(
     list(ui = fluidPage(DT::dataTableOutput("mytable")),

     server = function(input, output, session) {
       rowSelect <- reactive({
           a <- rep(FALSE,5)
           a[input$mytable_rows_selected] <- TRUE
           return( a ) 
       })

       output$mytable = DT::renderDataTable(
           cbind(mymtcars, v=rowSelect()),
           options = list(dom="t",
                          ordering=FALSE),
           selection=list(mode='multiple',
                          selected=(1:5)[rowSelect()],
                          target='row')
       )
   })
)

顺便说一下,一种不太优雅但也可行的方法是添加一列复选框而不是数据table 行selection 机制。我也尝试过,但遇到了类似的问题。一切都按照我想要的方式进行,直到我向数据添加反应列。

你几乎做对了!你必须用 datatable:

包裹你的 table
output$mytable <- DT::renderDataTable(
    datatable(cbind(mymtcars, v=rowSelect()),
              options = list(dom = "t",ordering = FALSE),
              selection = list(mode = "multiple",
                               selected =(1:5)[rowSelect()],
                               target = "row"))
)