2017-05-02 10 views
3

Dataの行を選択するためにradiButtonを追加する必要があります。つまり、選択されたラジオボタンを入力に渡す必要があります。 DTで組み込みの行選択を使用することはできません。私は実際に行を選択するためにラジオボタンを使用する必要があります。 これは欲しいものです:wanted result for rows selectionRadioButtonを追加してShinyのDataTable行を選択

使用するhttps://yihui.shinyapps.io/DT-radio/私はCOLUMNSを選択することができます。 エス:

library(shiny) 
library(DT) 
shinyApp(
ui = fluidPage(
title = 'Radio buttons in a table', 
DT::dataTableOutput('foo'), 
verbatimTextOutput("test") 
), 
server = function(input, output, session) { 
m = matrix(
    c(round(rnorm(24),1), rep(3,12)), nrow = 12, ncol = 3, byrow = F, 
    dimnames = list(month.abb, LETTERS[1:3]) 
) 
for (i in seq_len(nrow(m))) { 
    m[i, 3] = sprintf(
    if_else(i == 1, 
      '<input type="radio" name="%s" value="%s" checked="checked"/>', 
      '<input type="radio" name="%s" value="%s"/>'), 
    "C", month.abb[i] 
) 
} 
m=t(m) 

output$foo = DT::renderDataTable(
    m, escape = FALSE, selection = 'none', server = FALSE, 
    options = list(dom = 't', paging = FALSE, ordering = FALSE), 
    callback = JS("table.rows().every(function() { 
     var $this = $(this.node()); 
       $this.attr('id', this.data()[0]); 
       $this.addClass('shiny-input-radiogroup'); 
}); 
       Shiny.unbindAll(table.table().node()); 
       Shiny.bindAll(table.table().node());") 
) 
output$test <- renderPrint(str(input$C)) 
} 
) 

結果は:partial result for columns selection

単純に、Iは、m = tの(M)を除去しようとしたコールバックの列に行を変更します。これは、この例のコールバック関数がclassにidを追加し、最後の列にidを追加しているために機能しません。

答えて

3

「汚い」修正はC idとshiny-input-radiogroupクラスでdivで全体のDataTableをラップすることができます

shinyApp(
    ui = fluidPage(
    title = 'Radio buttons in a table', 
    tags$div(id="C",class='shiny-input-radiogroup',DT::dataTableOutput('foo')), 
    verbatimTextOutput("test") 
), 
    server = function(input, output, session) { 
    m = matrix(
     c(round(rnorm(24),1), rep(3,12)), nrow = 12, ncol = 3, byrow = F, 
     dimnames = list(month.abb, LETTERS[1:3]) 
    ) 
    for (i in seq_len(nrow(m))) { 
     m[i, 3] = sprintf(
     if_else(i == 1, 
       '<input type="radio" name="%s" value="%s" checked="checked"/>', 
       '<input type="radio" name="%s" value="%s"/>'), 
     "C", month.abb[i] 
    ) 
    } 
    m 
    output$foo = DT::renderDataTable(
     m, escape = FALSE, selection = 'none', server = FALSE, 
     options = list(dom = 't', paging = FALSE, ordering = FALSE) 
    ) 
    output$test <- renderPrint(str(input$C)) 
    } 
) 
+0

ナイス! 私はあなたの答えを受け入れるでしょう。 最初のラジオボタンがデフォルトでチェックされていても、入力$ Cの値はNULLになりますので、入力$ Cは "Jan"にする必要があります。 。 – gico

+0

いいえ、 'ifelse'を' 'で置き換えることができます。 – NicE

関連する問題