DT数据表中单元格选择期间的行为不一致

时间:2019-11-07 22:33:04

标签: r shiny dt

我下面有一个闪亮的应用程序,其中用户单击上表中的一个单元格,而相关单元格应显示在下表中。问题是,当我取消选择上方的单元格时,下方的单元格不仅保留,而且变得更多。

=TEXT(B1-A1; "[mm]")/60

2 个答案:

答案 0 :(得分:1)

请尝试以下操作:

library(shiny)
library(DT)
data("mtcars")

ui <- shinyUI(
    fluidRow(
        DT::dataTableOutput("myDatatable"),
        DT::dataTableOutput("myDatatable2")

    )

)

server <- shinyServer(function(input, output, session) {


    dat1 <- reactive({
        matrix(iris[,5])
    })


    list_all <- reactiveVal(character())
    observeEvent(input$myDatatable_cells_selected, {
        if (nrow(input$myDatatable_cells_selected) == 0) {
            list_all(character())
        } else {
            list_all(dat1()[input$myDatatable_cells_selected[,1]])
        }
    })



    output$myDatatable <- DT::renderDataTable(dat1(), 
                                              selection=list( target="cell"),
                                              server = FALSE,
                                              rownames=FALSE)
    output$myDatatable2 <- DT::renderDataTable(matrix(list_all()), 
                                               selection="none",
                                               server = FALSE,
                                               rownames=FALSE)

})

shinyApp(ui, server)

主要区别是使用input$myDatatable_cells_selected保留了当前选定的单元格,而input$myDatatable_cell_clicked则保留了被单击的单元格,即使未选中也是如此,从而导致了问题。

答案 1 :(得分:1)

这是另一种基于reactive的版本,在reactiveVal上使用library(shiny) library(DT) library(datasets) ui <- shinyUI(fluidRow( DT::dataTableOutput("myDatatable"), DT::dataTableOutput("myDatatable2") )) server <- shinyServer(function(input, output, session) { dat1 <- reactive({ data.frame(iris[, 5]) }) selected <- reactive({ req(input$myDatatable_cells_selected) selected <- input$myDatatable_cells_selected selected[, 2] <- selected[, 2] + 1 return(selected) }) output$myDatatable <- DT::renderDataTable( dat1(), selection = list(target = "cell"), server = FALSE, rownames = FALSE ) output$myDatatable2 <- DT::renderDataTable( data.frame(dat1()[selected()]), selection = "none", server = FALSE, rownames = FALSE) }) shinyApp(ui, server) (在闪亮时应始终是首选方式)+适用于多列。

{{1}}
相关问题