R语言 使DT可编辑,但仅接受正数作为输入

rta7y2nd  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(124)

有没有可能有一个可编辑的数据表(DTRShiny),但数字列只接受正值?

library(shiny)
library(DT)

ui <- fluidPage(
  DTOutput("table")
)

server <- function(input, output) {
  output$table <- renderDT({
    datatable(
      iris,
      editable = TRUE,
      options = list(
        columnDefs = list(
          list(targets = 1, className = "dt-right")
        )
      )
    )
  })
}

shinyApp(ui, server)
uidvcgyl

uidvcgyl1#

我能看到的唯一方法是使用代理来防止负值。例如,如果用户输入负值,我将编辑后的值设置为0。也可以使用相同的观察者打开一个模态对话框来通知用户。

library(shiny)
library(DT)

ui <- fluidPage(
  DTOutput("dtable")
)

server <- function(input, output) {
  
  dat <- iris
  
  output[["dtable"]] <- renderDT({
    datatable(
      dat,
      editable = TRUE,
      options = list(
        columnDefs = list(
          list(targets = 1, className = "dt-right")
        )
      )
    )
  })
  
  proxy <- dataTableProxy("dtable")
  
  observeEvent(input[["dtable_cell_edit"]], {
    info <- input[["dtable_cell_edit"]]
    if(info[["value"]] < 0) {
      info[["value"]] <- 0
      # here one could open a modal or a notification
    }
    dat <<- editData(dat, info, proxy = proxy)
  })
  
}

shinyApp(ui, server)

相关问题