#r #shiny #dt
#r #блестящий #dt
Вопрос:
Я пытаюсь сделать что-то вроде того, что показано здесь, но мне трудно понять, как это сделать в Shiny. В качестве примера было бы здорово иметь фильтр для mtcars
«эффективных» (автомобили с по крайней мере 15 миль на галлон) или «неэффективных» (автомобили с менее чем 15 миль на галлон).
Вот некоторый код:
library(shiny)
library(DT)
ui <- shinyUI(
fluidPage(DT::dataTableOutput("mtcars_table"))
)
server <- shinyServer(function(input, output, session) {
output$mtcars_table <-
DT::renderDT({
DT::datatable(
mtcars,
options = list(dom = 'Pfrtip',
columnDefs = list(
list(
searchPanes = list(show = TRUE), targets = 1
),
list(
searchPanes = list(show = FALSE), targets = 2:11
))),
extensions = c('Select', 'SearchPanes'),
selection = 'none'
)
}, server = FALSE)
})
shinyApp(ui = ui, server = server)
Ответ №1:
Вот что можно попробовать, основываясь на примере таблиц данных с пользовательскими параметрами фильтрации.
Для дополнительных list
опций я включил метку типа «Эффективный», а также функцию javascript для value
( rowData[1]
должна ссылаться на первый столбец, mpg
).
library(shiny)
library(DT)
ui <- shinyUI(
fluidPage(DT::dataTableOutput("mtcars_table"))
)
server <- shinyServer(function(input, output, session) {
output$mtcars_table <-
DT::renderDT({
DT::datatable(
mtcars,
options = list(
dom = 'Pfrtip',
columnDefs = list(
list(
searchPanes = list(
show = TRUE,
options = list(
list(
label = "Efficient",
value = JS(
"function(rowData, rowIdx) { return rowData[1] >= 15; }"
)
),
list(
label = "Inefficient",
value = JS(
"function(rowData, rowIdx) { return rowData[1] < 15; }"
)
)
)
),
targets = 1
),
list(
searchPanes = list(show = FALSE), targets = 2:11
)
)
),
extensions = c('Select', 'SearchPanes'),
selection = 'none'
)
}, server = FALSE)
})
shinyApp(ui = ui, server = server)
Комментарии:
1. Мне нравится этот пример, спасибо. Вы случайно не знаете, как управлять высотой области поиска? Мой такой большой, и это заставляет DT быть маленьким! Спасибо — JJ
2. @user2863275 Попробуйте добавить некоторые пользовательские css в
ui
, например:ui <- fluidPage(tags$style(HTML('div.dtsp-searchPane div.dataTables_scrollBody {height: 80px !important;}')), mainPanel(DT::dataTableOutput('mtcars_table')))
3. Это сделало свое дело. Я подумал об использовании тех же тегов после прочтения этого datatables.net/forums/discussion/67406/searchpanes-height если вы посмотрите на последнее сообщение на странице. Наверное, я не понимаю, когда использовать теги $style(HTML()) и DT::JS(), потому что я думал, что для реализации этих команд в searchPane() нужен какой-то специальный DT::JS() . Есть хорошие ссылки, чтобы узнать, как реализовать эти стили?
4. Я тоже видел эту запись на форуме, которая была полезной. Для встроенного использования css в блестящих приложениях см. Это или это или, может быть, это … надеюсь, они могут быть полезны и удачи!
5. Хорошие источники! Но намного проще, чем доступ к элементам DT. Придется поработать над интерпретацией и использованием. Спасибо 🙏