r-在单独的选项卡中打开选定的行

  • 本文关键字:单独 选项 r shiny
  • 更新时间 :
  • 英文 :


当在主DT表上选择特定行时,下面的应用程序将为您提供辅助DT表。我们能改变这个功能吗。与此相反,我们可以在主DT表下面设置反应选项卡吗。因此,当在主DT表(比如Mazda RX4(上选择特定行时;Mazda RX4";应该打开并提供详细信息。当选择另一行(比如勇敢(时,另一个选项卡应该打开并显示该名称及其内容。我们能实现这个吗

---
title: "MRE"
author: ""
output: 
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: scroll
runtime: shiny
---
Page {data-orientation=columns}
=======================================================================
Column {data-width=650}
-----------------------------------------------------------------------
### .
```{r}
require(DT)
library(dplyr)
library(tibble)
sliderInput("filter", label = "Filter by cyl", min = 4, max = 8, step = 2, value = 6)

filteredTable_data <- reactive({
mtcars %>% rownames_to_column() %>%  ##dplyr's awkward way to preserve rownames
filter(., cyl == input$filter) %>% column_to_rownames()
})
##explicit assignment to output ID
DT::dataTableOutput("filteredTable")
output$filteredTable <- DT::renderDataTable({
datatable(
filteredTable_data(),
selection = list(mode = "multiple"),
caption = "Filtered Table (based on cyl)"
)
})
filteredTable_selected <- reactive({
ids <- input$filteredTable_rows_selected
filteredTable_data()[sort(ids),]  ##sort index to ensure orig df sorting
})
##anonymous
DT::renderDataTable({
datatable(
filteredTable_selected(),
selection = list(mode = "none"),
caption = "Table that gets data from unfiltered original data"
)
})
```

在下面的应用程序中,每次选择特定行时,都会显示一个以行名为标题的新选项卡。当选择了两行时,具有最新选择的选项卡将显示为已选中。请告诉我任何疑问。

library(shiny)
library(DT)
library(tidyverse)
ui <- fluidPage(
sliderInput("filter", label = "Filter by cyl", min = 4, max = 8, step = 2, value = 6),
dataTableOutput("filteredTable"),
uiOutput('selected_with_tabs')
)
server <- function(input, output, session) {

filteredTable_data <- reactive({
mtcars %>%
rownames_to_column() %>%  ##dplyr's awkward way to preserve rownames
filter(., cyl == input$filter) %>%
column_to_rownames()
})

output$filteredTable <- DT::renderDataTable({
datatable(
filteredTable_data(),
selection = list(mode = "multiple"),
caption = "Filtered Table (based on cyl)"
)
})



filteredTable_selected <- eventReactive(input$filteredTable_rows_selected, {
ids <- input$filteredTable_rows_selected
rownames(filteredTable_data()[ids, ])
})


#dynamic tabs  
output$selected_with_tabs <- renderUI({
tabs <- filteredTable_selected() %>% 
map2(1:length(.), ~ tabPanel(title = .x, {
dataTableOutput(str_c('selected_', .y)) #contents of each tab
}))

tabsetPanel_wselection <- partial(tabsetPanel, selected = filteredTable_selected()[length(filteredTable_selected())])

tagList(exec(tabsetPanel_wselection, !!!tabs)) 
}) 

#server side of tab content.
observeEvent(input$filteredTable_rows_selected, {

walk2(1:length(filteredTable_selected()), filteredTable_selected(), ~ {
output[[str_c('selected_', .x)]] <- renderDataTable(mtcars[.y, ]) })

})

}
shinyApp(ui, server)

相关内容

最新更新