RenderDataTable中的SelectInput闪亮

时间:2019-08-15 09:50:31

标签: r shiny dt shinyjs

我已经创建了一个闪亮的数据表,用户可以在其中选择将ID视为从属,独立还是无。为了方便起见,我附上了一个可复制的示例。如果您运行该应用程序,则默认情况下,所有ID均归为“独立”。我接下来要尝试做的但当前未成功的是,默认情况下,与ID 3对应的选择应为Dependent。我正在为dataTable中的每一行使用一个selectInput。有人可以帮助我了解如何将一个特定的ID设置为依赖,默认情况下将其设置为独立。当用户随后运行该应用程序时,他可以使用selectInputs根据自己的需要更改ID下的选择。

library(shiny)
library(DT)


ui = fluidPage(
  DT::dataTableOutput('x1'),
)

server = function(input, output, session) {

# Helper function for making checkbox
  shinyInput = function(FUN, len, id,...) {
    inputs = character(len)
    for (i in seq_len(len)) {
      inputs[i] = as.character(FUN(paste0(id, i), label = NULL, ...))
    }
    inputs
}

# helper function for reading selections
  shinyValue = function(id, len) {
    unlist(lapply(seq_len(len), function(i) {
      value = input[[paste0(id, i)]]
      if (is.null(value)){
        NA
      } else {
        value
      }
    }))
}


n = 5

df = data.frame(ID = seq_len(n),
      selection = shinyInput(selectInput, n, 'cb_', choices=c("Independent","Dependent","None")),
      month = month.abb[1:n],
      stringsAsFactors = FALSE)


output$x1 = DT::renderDataTable({
      df},
      escape = FALSE, selection = 'none',
      options = list(
        dom = 't', paging = FALSE, ordering = FALSE,
        preDrawCallback = JS('function() { Shiny.unbindAll(this.api().table().node()); }'),
        drawCallback = JS('function() { Shiny.bindAll(this.api().table().node()); } ')
      ),rownames=FALSE)


}

shinyApp(ui = ui,server = server)

1 个答案:

答案 0 :(得分:0)

?selectInput

  

已选择(初始选择的值)(或多个,如果Multiple = TRUE)。如果未指定,则对于单选列表,默认为第一个值;对于多选列表,默认为第一个值。

因此,默认情况下,selectInput将选择第一个值作为默认值,因此,当i = 3(即ID = 3)时,我们需要更改默认值

# Helper function for making checkbox
shinyInput = function(FUN, len, id,...) {
  #browser()
  inputs = character(len)
  for (i in seq_len(len)) {
    if(i!=3){
      inputs[i] = as.character(FUN(paste0(id, i), label = NULL, ...))
    } else {
      inputs[i] = as.character(FUN(paste0(id, i), label = NULL, selected = "Dependent",...))
    }
  }
  inputs
}