2015-05-29 3 views
2

Использование https://demo.shinyapps.io/029-row-selection/ в качестве ссылки, я создаю приложение, чтобы выбрать любое количество строк в отсортированных/несортированных данных & получить соответствующие индексы. Однако, если я использую код как есть, он не работает с отсортированными данными. Поэтому я изменил код следующим образом:Выбор и извлечение нескольких строк из отсортированного datatable в R Shiny

server.R

library(shiny) 

shinyServer(function(input, output) { 
    output$tbl <- renderDataTable(
    mtcars, 
    options = list(pageLength = 10), 
    callback = "function(table) { 
     table.on('click.dt', 'tr', function() { 
     $(this).toggleClass('selected'); 
     Shiny.onInputChange('rows', 
          table.rows('.selected').data()[0][0]); # returns actual row number but does not allow multiple selection 
     }); 
    }" 
) 
    output$rows_out <- renderText({ 
    paste(c('You selected these rows on the page:', input$rows), 
      collapse = ' ') 
    }) 
}) 

ui.R

library(shiny) 

shinyUI(fluidPage( title = 'Row selection in DataTables', sidebarLayout(
    sidebarPanel(textOutput('rows_out')), 
    mainPanel(dataTableOutput('tbl')), 
    position = 'right' ))) 

Поэтому я использую Shiny.onInputChange('rows',table.rows('selected').data()[0][0]); так, что, когда таблица sorted, он возвращает номер строки в фактическом наборе данных, а не индекс, основанный на видимой таблице. Но проблема в том, что он возвращает только первый выбор.

Я также попытался использовать Shiny.onInputChange('rows',table.rows('selected').data()[0][0].toArray());, чтобы получить все выбранные номера строк в массиве, но, как ни странно, он ничего не возвращает, даже не первый выбранный номер строки (например, выше).

ответ

0

Данная проблема была решена в пакете DT. Вам больше не нужно писать JavaScript. Для примера см. http://rstudio.github.io/DT/shiny.html.

+0

Я использую shiny_0.11. Используя пакет DT и обновление до shiny_0.12, я должен изменить весь свой блестящий код (это всего лишь небольшая часть моего кода), потому что я видел, что есть много изменений от предыдущей к текущей версии. Но, в любом случае, я попытаюсь обновить свой код. –

+0

@ KomalRathi Хорошо, дайте мне знать, если у вас возникнут проблемы при переключении на DT. –

Смежные вопросы