Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在数据库中搜索Datatable的多个列_R_Shiny_Dt - Fatal编程技术网

R 在数据库中搜索Datatable的多个列

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

我目前正在尝试制作一个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          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在空间上存在问题;可能是个虫子。嘿,阿利斯泰尔,是的,我刚找到。谢谢。@alistaire
server=TRUE
很棘手。我已经发布了一个答案。如果您在
renderDataTable
中设置
server=FALSE
,它会工作。显然,出于某种原因,Shiny在空间上存在问题;可能是个虫子。嘿,阿利斯泰尔,是的,我刚找到。谢谢。@alistaire
server=TRUE
很棘手。我已经发布了一个答案。如果需要使用服务器端处理并使用
Server=TRUE
?@keshr3106该怎么办?解决方案不是很简单。我刚刚发布了一个答案。如果需要使用服务器端处理并使用
Server=TRUE
?@keshr3106该怎么办?解决方案不是很简单。我刚刚发布了一个答案。