Я работаю над приложением Shiny, чтобы пользователи могли выбирать столбцы, фильтровать строки и загружать результат. Для этого я использую таблицы данных. Файл данных умеренно большой, и использование обработки на стороне клиента приводит к довольно значительному замедлению; однако, используя обработку на стороне сервера, я не могу получить доступ к отфильтрованному набору данных.
Другими словами, когда server = FALSE в renderDataTable (), input $ foo_rows_all возвращает все отфильтрованные строки, но когда server = TRUE input $ foo_rows_all возвращает только строки на текущей отображаемой странице, а не все строки. Как я могу получить доступ ко всем отфильтрованным строкам, когда server = TRUE.
Пример, показывающий проблему:
library(shiny)
library(dplyr)
library(DT)
dat<-data.frame(letters=c(rep("A",15),rep("B",5),rep("C",5)))
server<-shinyServer(function(input, output) {
#Returns filtered data
output$dat_false <- renderDataTable(dat,filter = "top",server = FALSE)
#Returns just the currently visible values
output$dat_true <- renderDataTable(dat,filter = "top",server = TRUE)
#This code modified from: https://yihui.shinyapps.io/DT-info/
output$x5 = renderPrint({
cat('\n\nAll rows with server = TRUE:\n\n')
cat(input$dat_true_rows_all, sep = ', ')
cat('\n\nAll rows with server = FALSE:\n\n')
cat(input$dat_false_rows_all, sep = ', ')
})
})
ui<-shinyUI(
fluidPage(
sidebarLayout(
sidebarPanel(verbatimTextOutput('x5')),
mainPanel(dataTableOutput("dat_true"),
dataTableOutput("dat_false"))
)
)
)
shinyApp(ui,server)