Javascript 闪亮数据表中的单选按钮;“次选择”;一列中的行数/分组数

Javascript 闪亮数据表中的单选按钮;“次选择”;一列中的行数/分组数,javascript,r,shiny,dt,Javascript,R,Shiny,Dt,我试图完成的与之类似,但稍微复杂一些 我想将单选按钮分为不同的组,但在一列中,这样就可以进行行的“子选择” 目前只有ID为“C”的单选按钮组工作,因为div元素是为整个表定义的。我试图通过javascript回调插入闪亮的标记,但我只能为每一行或每一列插入单选按钮,但不能为一列中多行的子集插入单选按钮 对javascript或闪亮的解决方案开放 shinyApp( ui = fluidPage( title = 'Radio buttons in a table', tags

我试图完成的与之类似,但稍微复杂一些

我想将单选按钮分为不同的组,但在一列中,这样就可以进行行的“子选择”

目前只有ID为“C”的单选按钮组工作,因为div元素是为整个表定义的。我试图通过javascript回调插入闪亮的标记,但我只能为每一行或每一列插入单选按钮,但不能为一列中多行的子集插入单选按钮

对javascript或闪亮的解决方案开放

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])
    )
    m[, 2] <- rep(c("A","B","C", "D"), each= 3)
    m[, 3] <- paste0('<input type="radio" name="', rep(c("A","B","C", "D"), each= 3),'" value="', month.abb,'"/>')
    m[c(1,4,7,10), 3] <- gsub('/>', 'checked="checked"/>', m[c(1,4,7,10), 3], fixed = 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))
  }
)

您可以将
div
元素相互嵌套,如下所示:

  ui = fluidPage(
    title = "Radio buttons in a table",
    div(id = "A", class = "shiny-input-radiogroup",
      div(id = "B", class = "shiny-input-radiogroup",
        div(id = "C", class = "shiny-input-radiogroup",
          div(id = "D", class = "shiny-input-radiogroup", DT::dataTableOutput("foo"))    
        )
      )
    ),
l <- unique(m[, 2])

for(i in 1:length(l)) {
  if (i == 1) {
    radio_grp <- div(id = l[i], class = "shiny-input-radiogroup", DT::dataTableOutput("foo"))
  } else {
    radio_grp <- div(id = l[i], class = "shiny-input-radiogroup", radio_grp) 
  }
}
我还修改了
renderText
,以便打印所有值

output$test <- renderPrint( {
  str(input$A)
  str(input$B)
  str(input$C)
  str(input$D)
})

谢谢,这很有魅力。但是如果我有100个组,那么嵌套这么多
div
元素明智吗?有可能动态嵌套这些吗?我不认为嵌套一些
div
应该是个问题。至于“动态嵌套”,您可以为此编写一个循环。请看我的编辑。再次感谢!还有一个关于单选按钮在交互之前具有
NULL
值的问题。当它们为
NULL
时,我在
observe()
中更改了它们的值。但是,如果我进行了选择或更改了任何内容(导致表重新呈现的原因),则在任何按钮中都不会显示为选中状态。但它们的输入值仍然相同。您知道如何使用默认值以这种方式渲染表,或者在每次渲染后将其视觉输出相应地更改为当前值吗?
l <- unique(m[, 2])

for(i in 1:length(l)) {
  if (i == 1) {
    radio_grp <- div(id = l[i], class = "shiny-input-radiogroup", DT::dataTableOutput("foo"))
  } else {
    radio_grp <- div(id = l[i], class = "shiny-input-radiogroup", radio_grp) 
  }
}