Не могу скрыть столбцы И установить имена строк = FALSE в Shiny DT
Я создал таблицу данных в 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 ответ
Так как имена строк также являются столбцами, когда вы устанавливаете их в 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"))
)
})
}