R 在数据库中搜索Datatable的多个列
我目前正在尝试制作一个R闪亮的应用程序,用户可以在每行的多个列中进行搜索。此函数使用闪亮环境外部的R 在数据库中搜索Datatable的多个列,r,shiny,dt,R,Shiny,Dt,我目前正在尝试制作一个R闪亮的应用程序,用户可以在每行的多个列中进行搜索。此函数使用闪亮环境外部的DT包中的datatable函数工作。以iris数据集为例,我想搜索包含这些值的所有行;5.1、3.5和1.4。如果我在交互式数据表窗口的搜索框中键入以下字符串,“5.1 3.5 1.4”将显示第1行和第18行 library(DT) head(iris) # Sepal.Length Sepal.Width Petal.Length Petal.Width Species # 1
DT
包中的datatable
函数工作。以iris
数据集为例,我想搜索包含这些值的所有行;5.1、3.5和1.4。如果我在交互式数据表窗口的搜索框中键入以下字符串,“5.1 3.5 1.4”将显示第1行和第18行
library(DT)
head(iris)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa
datatable(iris)
问题是,当我尝试在一个闪亮的环境中做同样的事情时,我收到了消息
没有找到匹配的记录
例如:
if (interactive()) {
library(shiny)
shinyApp(
ui = fluidPage(fluidRow(column(12, DT::dataTableOutput('tbl')))),
server = function(input, output) {
output$tbl = DT::renderDataTable(
iris, options = list(lengthChange = FALSE)
)
}
)
}
是否有人有解决方法,或者可以告诉我我做错了什么?对于其他有相同问题的人,您需要
server=FALSE
到renderdataable
功能
if (interactive()) {
library(shiny)
shinyApp(
ui = fluidPage(fluidRow(column(12, DT::dataTableOutput('tbl')))),
server = function(input, output) {
output$tbl = DT::renderDataTable(
iris, options = list(lengthChange = FALSE), server = FALSE
)
}
)
}
对于存在相同问题的任何其他人,您需要
server=FALSE
到renderDataTable
函数
if (interactive()) {
library(shiny)
shinyApp(
ui = fluidPage(fluidRow(column(12, DT::dataTableOutput('tbl')))),
server = function(input, output) {
output$tbl = DT::renderDataTable(
iris, options = list(lengthChange = FALSE), server = FALSE
)
}
)
}
更新:我在服务器端处理模式下实现了,默认情况下已启用。当DT>=0.2.29时,它应该是开箱即用的:
devtools::install_github('rstudio/DT')
library(shiny)
shinyApp(
ui = fluidPage(fluidRow(column(12, DT::dataTableOutput('tbl')))),
server = function(input, output) {
output$tbl = DT::renderDataTable(
iris, options = list(search = list(search = '5.1 3.5 1.4'))
)
}
)
您可以忽略下面的旧答案。 可以在搜索()中启用正则表达式 在上面的示例中,我使用了正则表达式
5.1 | 3.5 | 1.4
。请注意,它的意思是“在任何列中查找值5.1、3.5或1.4”。如果您需要在第一列中查找5.1,在第二列中查找3.5,在第三列中查找1.4,则无法在服务器端处理模式下使用单个搜索字符串(单个正则表达式无法表示这一点)。您必须使用客户端处理(如您所发现的,server=FALSE
),或者对列进行排序以找到所需的组合:
或使用列过滤器过滤单个列:
library(shiny)
shinyApp(
ui = fluidPage(fluidRow(column(12, DT::dataTableOutput('tbl')))),
server = function(input, output) {
output$tbl = DT::renderDataTable(
iris, filter = 'top'
)
}
)
更新:我在服务器端处理模式下实现了,默认情况下已启用。当DT>=0.2.29时,它应该是开箱即用的:
devtools::install_github('rstudio/DT')
library(shiny)
shinyApp(
ui = fluidPage(fluidRow(column(12, DT::dataTableOutput('tbl')))),
server = function(input, output) {
output$tbl = DT::renderDataTable(
iris, options = list(search = list(search = '5.1 3.5 1.4'))
)
}
)
您可以忽略下面的旧答案。 可以在搜索()中启用正则表达式 在上面的示例中,我使用了正则表达式
5.1 | 3.5 | 1.4
。请注意,它的意思是“在任何列中查找值5.1、3.5或1.4”。如果您需要在第一列中查找5.1,在第二列中查找3.5,在第三列中查找1.4,则无法在服务器端处理模式下使用单个搜索字符串(单个正则表达式无法表示这一点)。您必须使用客户端处理(如您所发现的,server=FALSE
),或者对列进行排序以找到所需的组合:
或使用列过滤器过滤单个列:
library(shiny)
shinyApp(
ui = fluidPage(fluidRow(column(12, DT::dataTableOutput('tbl')))),
server = function(input, output) {
output$tbl = DT::renderDataTable(
iris, filter = 'top'
)
}
)
如果在
renderDataTable
中设置server=FALSE
,则该选项有效。显然,出于某种原因,Shiny在空间上存在问题;可能是个虫子。嘿,阿利斯泰尔,是的,我刚找到。谢谢。@alistaireserver=TRUE
很棘手。我已经发布了一个答案。如果您在renderDataTable
中设置server=FALSE
,它会工作。显然,出于某种原因,Shiny在空间上存在问题;可能是个虫子。嘿,阿利斯泰尔,是的,我刚找到。谢谢。@alistaireserver=TRUE
很棘手。我已经发布了一个答案。如果需要使用服务器端处理并使用Server=TRUE
?@keshr3106该怎么办?解决方案不是很简单。我刚刚发布了一个答案。如果需要使用服务器端处理并使用Server=TRUE
?@keshr3106该怎么办?解决方案不是很简单。我刚刚发布了一个答案。