Не могу скрыть столбцы И установить имена строк = FALSE в Shiny DT - PullRequest
0 голосов
/ 26 февраля 2019

Я создал таблицу данных в Shiny, которая использует DT для стилизации значений на основе значений в наборе скрытых столбцов.Таблица показывает, достигли ли подразделения компании своих целей в отношении вызовов и электронной почты.

Проблема в том, что когда я скрываю столбцы (используя columnDefs = list(list(targets = c(4, 5), visible = FALSE))), я больше не могу использовать rownames = FALSE при вызове datatable(): таблица отображается без данных.Кто-нибудь знает, как я могу заставить оба этих варианта работать вместе?

Я использовал следующие статьи:

https://rstudio.github.io/DT/010-style.html

Как подавить имена строк при использовании DT :: renderDataTable в R блестящем?

library(shiny)
library(tidyverse)
library(DT)

x <- tibble(
  Unit = c("Sales", "Marketing", "HR"), 
  Calls = c(100, 150, 120), 
  Emails = c(200, 220, 230), 
  Calls_goal = c(1, 0, 0), 
  Emails_goal = c(0, 1, 1)
)


ui <- fluidPage(

   mainPanel(
         DT::dataTableOutput("table")
      )
)

server <- function(input, output) {

   output$table <- DT::renderDataTable({

     # Can't use both visible = FALSE and rownames = FALSE

     datatable(x, 
               options = list(
                 columnDefs = list(list(targets = c(4, 5), visible = FALSE)) # THIS
              ), 
              rownames = TRUE) %>% # OR THIS
       formatStyle(
         columns = c('Calls', 'Emails'), 
         valueColumns = c('Calls_goal', 'Emails_goal'), 
         color = styleEqual(c(1, 0), c("red", "black"))
       ) 

   })
}

shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 26 февраля 2019

Поскольку имена строк также являются столбцами, когда вы устанавливаете их в false, вам нужно переиндексировать столбцы, которые вы хотите скрыть.Таким образом, в вашем конкретном случае столбец 5 больше не существует.Теперь это номер 4, а 4-й - 3-й, поэтому ваш код должен выглядеть так:

server <- function(input, output) {

  output$table <- DT::renderDataTable({

    # Can't use both visible = FALSE and rownames = FALSE

    datatable(x,  rownames=F,
              options = list(
                columnDefs = list(list(targets = c(3, 4), visible = FALSE) # THIS
              )
             ))  %>% # OR THIS
      formatStyle(
        columns = c('Calls', 'Emails'), 
        valueColumns = c('Calls_goal', 'Emails_goal'), 
        color = styleEqual(c(1, 0), c("red", "black"))
      ) 

  })
}
...