С помощью предыдущего вопроса я могу теперь стилизовать выбранные строки (предназначенные для выбора пользователями строк, которые будут исключены из дальнейшего анализа), но я обнаружил, что сортировка данных после выполнения функциональность для исключения строк (выделение серым цветом и добавление другого значка, сохранение значка в правильном ряду, но затенение неправильных рядов.
вот таблица после отмены выбора строк 2,3 и 4 перед сортировкой:
![enter image description here](https://i.stack.imgur.com/49qO5.png)
и после сортировки: (с крестиками в правильных рядах, но не с серым.
![enter image description here](https://i.stack.imgur.com/34it2.png)
library(shiny)
library(DT)
mtcars <- as.data.table(mtcars[1:15, )
ui <- fluidPage(
# actionButton('SubmitRemoval', 'Exclude selected rows'),
# actionButton('UndoRemoval', 'Include full data'),
# br(),
DTOutput('metadataTable')
)
server <- function(input, output,session) {
values <- reactiveValues()
rowCallbackMeta = function(rows){
c(
"function(row, data, num, index){",
sprintf(" var rows = [%s];", paste0(rows-1, collapse = ",")),
" if(rows.indexOf(num) > -1){",
" for(var i=0; i<data.length; i++){",
" $('td:eq('+i+')', row)",
" .css({'color': 'rgb(211,211,211)', 'font-style': 'italic'});",
" }",
" }",
" $('td:eq(3)', row).html(data[3].toExponential(2));",
"}"
)
}
output$metadataTable <- DT::renderDataTable({
rows <- values$RowsRemove
# mtcars1 <- cbind(Selected ='<span style = "color:#31C769 ; font-size:18px"><i class="fa fa-check"></i></span>', mtcars)
mtcars1 <- cbind(Selected ='<span style = "color:red ; font-size:18px"><i class="glyphicon glyphicon-ok"></i></span>', mtcars)
print(rows)
# if(!is.null(rows)) {
mtcars1$Selected[rows] <- '<span style = "color:red ; font-size:18px"><i class="glyphicon glyphicon-remove"></i></span>'
# }
Table_opts <- list(
dom = 'frtipB',
searching = F,
pageLength = 50,
searchHighlight = TRUE,
colReorder = TRUE,
fixedHeader = TRUE,
buttons = list('copy', 'csv',
list(
extend = "collection",
text = 'Deselect',
action = DT::JS("function ( e, dt, node, config ) {
Shiny.setInputValue('SubmitRemoval', true, {priority: 'event'});
}")
),
list(
extend = "collection",
text = 'Restore',
action = DT::JS("function ( e, dt, node, config ) {
Shiny.setInputValue('UndoRemoval', true, {priority: 'event'});
}")
)
),
paging = TRUE,
deferRender = TRUE,
columnDefs = list(list(className = 'dt-right', targets = '_all')),
rowCallback = JS(rowCallbackMeta(rows)),
scrollX = T,
scrollY = 440
)
DT::datatable(mtcars1,
escape = FALSE,
extensions = c('Buttons', 'ColReorder', 'FixedHeader', 'Scroller'),
selection = c('multiple'),
rownames = FALSE
,
options = Table_opts
)
})
observeEvent(values$RowsRemove, {
print('seeing rows remove')
values$Datafiles_meta_Selected <- values$Datafiles_meta_Selected[-c(values$RowsRemove),]
})
observeEvent(input[['SubmitRemoval']], {
if(is.null(values$RowsRemove)) { values$RowsRemove <- as.numeric()}
values$RowsRemove <- unique(c(values$RowsRemove, input[["metadataTable_rows_selected"]]))
})
observeEvent(input[["UndoRemoval"]], {
values$RowsRemove <- NULL
values$Datafiles_meta_Selected <- values$Datafiles_meta
})
}
shinyApp(ui, server)