Сохранение значений на основе выбора нескольких ячеек таблицы данных во фрейме данных - PullRequest
1 голос
/ 30 октября 2019

У меня блестящее приложение с двумя таблицами данных. Первый позволяет выбирать несколько ячеек, а второй - один. Каждое значение ячейки должно храниться в list_all() и затем отображаться в виде новой таблицы. Проблема в том, что из 1-й таблицы сохраняется только последний выбор ячеек вместо каждого выбора.

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)

1 Ответ

2 голосов
/ 30 октября 2019

Как то так?

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)
...