rhandsontable, используя раскрывающийся список, чтобы «скрыть» столбцы - PullRequest
0 голосов
/ 09 июля 2020

У меня есть фрейм данных, который я передаю в rhandsontable. Допустим, у него 10 столбцов. У меня есть раскрывающийся список с 3 вариантами:

  1. Показать столбцы с 1 по 5
  2. Показать столбцы 1, 5 и 10
  3. Показать столбцы с 6 по 10

По умолчанию при загрузке rhandsontable будут показаны все 10 столбцов. Когда использование выбирает один из трех вариантов в раскрывающемся списке, я хочу скрыть определенные столбцы, используя hot_col(col = col_name, width = 0.5)

Например, если пользователь выбирает вариант 1 - Показать столбцы с 1 по 5, скрывая столбцы С 6 по 10 будет выглядеть примерно так:

rhandsontable(df) %>%
hot_col(col = column_6, width = 0.5) %>%
hot_col(col = column_7, width = 0.5) %>%
hot_col(col = column_8, width = 0.5) %>%
hot_col(col = column_9, width = 0.5) %>%
hot_col(col = column_10, width = 0.5)

Я попытался отфильтровать набор данных примерно так:

df <- if (input$dropdown == "Show columns 1 through 5") {df %>% select(1:5)}
else if (input$dropdown == "Show columns 1, 5 and 10") {df %>% select(1, 5, 10)}
else if (input$dropdown == "Show columns 6 through 10") {df %>% select(6:10)}
else {df %>% select(1:10)}

, который работает только для отображения определенных c столбцов, но у меня есть hot_col правила, указывающие c для разных столбцов, которые взрываются, потому что, если у меня есть правило, согласно которому столбец_6 имеет тип даты, он не найдет столбец_6, если выбран параметр «Показать столбцы с 1 по 5».

Извините, у меня нет рабочего примера, но надеюсь, что это имеет смысл. Спасибо!

1 Ответ

0 голосов
/ 10 июля 2020

Вы можете определить из selectInput, какие столбцы должны быть скрыты, а затем использовать эту информацию в вызове renderRHandsontable для динамического скрытия столбцов:

library(shiny)
library(rhandsontable)
ui <- fluidPage(
  fluidRow(
    column(width = 6,
           selectInput( inputId = "columns", 
                        label = "select columns",
                        choices = c("all", "first half", "second half")
           )
           
           
    ),
    rHandsontableOutput("table")
  )
)

server <- function(input, output, session) {
  
  output$table <- renderRHandsontable({
    output <- rhandsontable(mtcars[, 1:4])
    
    # determine the columns to show
    if (input$columns == "all") columns_to_hide <- NULL
    if (input$columns == "first half") columns_to_hide <- 3:4
    if (input$columns == "second half") columns_to_hide <- 1:2
    
    used_colnames <- colnames(mtcars[, 1:4])
    
    if (!is.null(columns_to_hide)) {
      for (col_name in used_colnames[columns_to_hide]) {
        output <- output %>% hot_col(col = col_name, width = 0.5)
      }
    }
    
    output
  })
}
shinyApp(ui, server)
...