2017-09-22 28 views
1

データテーブルでは、それぞれの行が選択されているかどうかによって値が変化するはずです。何が頭痛になるのかは次のとおりです。データが更新されると、テーブルが書き直され、選択が解除されます。Shiny DT :: datatable - 行が選択されたときにテーブルの内容を変更する

私はこの課題に2時間以上取り組んでいますが、解決策を見つけていません。たいてい私は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

あなたはほぼ正しいです!あなたは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

+0

私は私の評判など、あなたの答えは便利に投票することはできません申し訳ありませんが、あなたはまた、selctedすべての行を持つテーブルを開始する方法を知っているかもしれないが低すぎ:-(です? – Hans

+0

@Hans 'selected =" all "' – PoGibas

+0

のようなデータテーブルにオプションがあるはずです。このオプションはすでに以前の選択(テーブルの書き換え前)を記憶するために使用されているので、 「選択されていない」と「選択されていない」と解釈され、「v =!rowSelect()」となるように解釈されますが、このように「チート」しない方がよりエレガントになると思います。私を大いに歓迎した。 – Hans

関連する問題