在闪亮的仪表板中基于多个 DT 行选择存储和打印单元格值

Store and print cell values based on multiple DT row selection in a shiny dashboard

我下面有一个闪亮的仪表板,我希望能够从数据表中 select 多行,当用户 select 一行并按下相对 [=11= 的操作按钮时] 单元格显示在框中。现在我只能存储我的第一个 selection.

ui <- dashboardPage(
  dashboardHeader(),

  dashboardSidebar(
    sidebarMenu()

  ),

  dashboardBody(
    uiOutput("jobs")
  )
)

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


  # helper for debugging
  observeEvent(input$action, {
    print(mtcars)
  })

  # graph



  # jobs UI
  output$jobs <- renderUI({
    list(
      fluidRow(
        uiOutput("job_selected")),
      fluidRow(
        DTOutput("jobslist")))
  })

  output$jobslist <- renderDT({
    if (!is.null(mtcars)) {
      r <- mtcars %>% 
        select(mpg,cyl,disp,hp,drat,wt)

      datatable(r, 
                # escape = F,
                selection = "multiple", 
                options = list(
                  columnDefs = list(list(searchable = F, targets = c(2, 5)))),
                filter = "top")
    }
  })

  output$job_selected <- renderUI({
    req(input$jobslist_rows_selected)

    list(
      box(width = 6,
          mtcars %>% 
            filter(row_number() %in% input$jobslist_rows_selected) %>% 
            pull(mpg),
          tags$br(),
          actionButton("assignCB", "assigned selected to CB")
      )
    )
  })





}

shinyApp(ui, server)

我认为你在这里让事情变得有点复杂。你不需要 renderUI/uiOutput。我只想定义一个框、操作按钮和数据表输出;使用绑定到按钮的 eventReactive 仅在单击按钮时获取选定的行(并从中生成文本); renderText 绑定到 eventReactive 变量。

library(shiny)
library(shinydashboard)
library(DT)
library(dplyr)

ui <- dashboardPage(
    dashboardHeader(),
    dashboardSidebar(),
    dashboardBody(
        box(
            title='selected',
            width = 6,
            solidHeader = TRUE,
            status = "primary",
            textOutput('selected_rows')),
        actionButton("get_selected_rows", 'Get selected rows'),
        DTOutput("my_dt"))
)

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

    # show DT
    output$my_dt <- renderDT({
        mtcars %>%
            select(mpg, cyl, disp, hp, drat, wt) %>%
            datatable(
                selection = "multiple", 
                options = list(
                    columnDefs = list(list(searchable = F, targets = c(2, 5)))),
                    filter = "top")
    })

    # store data as text variable
    my_selected_rows <- eventReactive(input$get_selected_rows, {
        rows_selected <- input$my_dt_rows_selected
        selected_values <- mtcars %>% 
            filter(row_number() %in% rows_selected) %>% 
            select(mpg)
        unlist(selected_values)
    })

    # render text variable to be used in textOutput
    output$selected_rows <- renderText({
        my_selected_rows()
    })
}

shinyApp(ui, server)