【问题标题】:Store values based on multiple data table cell selection in a data frame根据数据框中的多个数据表单元格选择存储值
【发布时间】:2019-10-30 01:51:16
【问题描述】:

我有一个闪亮的应用程序,其中包含两个数据表。第一个允许选择多个单元格,而第二个允许选择多个单元格。每个单元格值都应该存储在list_all() 中,然后显示为一个新表格。问题是从第一个表中只存储最后一个单元格选择而不是每个选择。

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

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

  )

)

server <- shinyServer(function(input, output, session) {
  output$myDatatable <- DT::renderDataTable(matrix(iris[,5]), 
                                            selection=list( target="cell"),
                                            server = FALSE,
                                            rownames=FALSE)
  output$myDatatable2 <- DT::renderDataTable(matrix(iris[c(25,78,67,45,90,66,78,9,8),5]), 
                                             selection=list(mode="single", target="cell"),
                                             server = FALSE,
                                             rownames=FALSE)
  list_all <- reactive({
    x <- c(input$myDatatable_cell_clicked$value, input$myDatatable2_cell_clicked$value)

  })

  output$myDatatable3 <- DT::renderDataTable(matrix(list_all()) 
                                             )
})

shinyApp(ui, server)

【问题讨论】:

    标签: r shiny dt


    【解决方案1】:

    这样的?

    library(shiny)
    library(DT)
    data("mtcars")
    
    ui <- shinyUI(
      fluidRow(
        DTOutput("myDatatable"),
        DTOutput("myDatatable2"),
        DTOutput("myDatatable3")
      )
    )
    
    server <- function(input, output, session) {
      output$myDatatable <- renderDT(matrix(iris[,5]), 
                                     selection=list( target="cell"),
                                     server = FALSE,
                                     rownames=FALSE)
      output$myDatatable2 <- renderDT(matrix(iris[c(25,78,67,45,90,66,78,9,8),5]), 
                                      selection=list(mode="single", target="cell"),
                                      server = FALSE,
                                      rownames=FALSE)
    
      list_all <- reactiveVal(character())
      observeEvent(input$myDatatable_cell_clicked, {
        list_all(append(list_all(), input$myDatatable_cell_clicked$value))
      })
      observeEvent(input$myDatatable2_cell_clicked, {
        list_all(append(list_all(), input$myDatatable2_cell_clicked$value))
      })
    
      output$myDatatable3 <- renderDT(matrix(list_all()))
    }
    
    shinyApp(ui, server)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 2021-03-11
      • 2018-01-16
      相关资源
      最近更新 更多