在闪亮的仪表板中基于多个 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)
我下面有一个闪亮的仪表板,我希望能够从数据表中 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)