Shiny DT :: datatable - 选择行时更改表格内容

时间:2017-09-22 22:30:09

标签: r shiny dt shiny-reactivity

在数据表中,某些值应该根据是否选择了相应的行而改变。让我头疼的是以下几点:当数据更新时,表格会被重写,选择就会消失。

我已经在这个挑战中工作了几个小时,但没有找到解决方案。大部分时间我都在stackoverflow找到解决问题的方法,但这次我没有。

在下面的示例中,最后一列应该显示行的选择状态。我试图跟踪所选行并在重写表时预先选择它们。但我无法弄清楚如何使其发挥作用;代码不起作用,但(希望)显示我需要的东西。

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')
       )
   })
)

顺便说一句,不太优雅但也可能的方法是添加一列复选框而不是数据表行选择机制。我也尝试过,但有类似的问题。一切都按照我想要的方式进行,直到我将反应列添加到我的数据中。

1 个答案:

答案 0 :(得分:1)

你几乎做对了!你必须用datatable包裹你的表:

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

enter image description here