当使用DT::renderDataTable时,当server=TRUE时,如何访问要过滤的行
我正在开发一个闪亮的应用程序,让用户选择列、过滤行并下载结果。我使用数据表来实现这一点。数据文件相当大,使用客户端处理会导致相当大的速度减慢;但是,使用服务器端处理,我无法访问过滤后的数据集 换句话说,当renderDataTable()中的server=FALSE时,input$foo_rows_all返回所有筛选的行,但当server=TRUE时,input$foo_rows_all只返回当前显示页面上的行,而不是所有行。当server=TRUE时,如何访问所有筛选的行 下面是一个显示问题的示例:当使用DT::renderDataTable时,当server=TRUE时,如何访问要过滤的行,r,shiny,dt,R,Shiny,Dt,我正在开发一个闪亮的应用程序,让用户选择列、过滤行并下载结果。我使用数据表来实现这一点。数据文件相当大,使用客户端处理会导致相当大的速度减慢;但是,使用服务器端处理,我无法访问过滤后的数据集 换句话说,当renderDataTable()中的server=FALSE时,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)
库(闪亮)
图书馆(dplyr)
图书馆(DT)
dat您有input$data\u true\u search\u列
和input$data\u true\u search
变量可供使用。例如,您可以编写这样的函数来获取所选行(注意,我使用fromJSON
来转换json,但是您可以使用chartr(“[]”,“()”,…)
或类似方法手动执行。我不知道这是否是正确的方法,要处理数值范围选择,您需要修改函数以处理这些选择
library(shiny)
library(dplyr)
library(DT)
library(jsonlite)
dat<-data.frame(letters=c(rep("A",15),rep("B",5),rep("C",5)))
activeRows <- function(cols) {
active <- which(cols!='')
if (!length(active)) return( seq_len(nrow(dat)) )
vals <- lapply(cols[active], fromJSON)
which(
Reduce("&", lapply(seq_along(vals), function(i) dat[,i] %in% vals[[i]])))
}
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(activeRows(input$dat_true_search_columns), 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)
库(闪亮)
图书馆(dplyr)
图书馆(DT)
图书馆(jsonlite)
dat