首页 > 解决方案 > 双头滑块输入未获取 R 范围内的所有值

问题描述

我正在尝试设计一个反应式闪亮应用程序。我正在使用双头滑块输入来获取多个值并在 Shiny App 的数据表中显示它对应的其他列值。例如,我面临的问题是让范围为 1 到 3,其中我的数据具有 1、2 和 3 的值。当我将一个输入点放在 1 中,将另一个输入点放在 3 中时,一般的期望是,它也应该获取 2 的值,因为它存在于 1 到 3 的范围内。但是 2 的值没有显示出来。请找到我用来创建滑块输入的代码。

sliderInput(
                  "key",
                  "Key Value",
                  min = 1,
                  max = 3,
                  value = c(1,3),
                  step=1
                )

在闪亮的应用程序中,滑块输入值是这样选择的。

在此处输入图像描述

我得到的输出是

在此处输入图像描述

但我也应该得到 2 的值。

有人可以帮我解决这个问题。提前致谢。

标签: rshinyuislidershinydashboard

解决方案


我希望错误不在您的滑块中,而是在您的过滤方式中。请注意,滑块返回选定的最小值和最大值,而不是其范围内的所有值。所以在这里,input$key将返回一个包含数字和 1 和 3 的数组,而不是 2。如果您随后应用 filter df$Key %in% input$key,则只会选择 1 和 3。如果您想要范围内的所有数字,您应该过滤介于两者之间的数字,例如

df$Key >= input$key[1] & df$Key <= input$key[2]

或者

df$Key %inrange% input$key,

从包中%inrange%data.table

下面给出了一个工作示例,希望对您有所帮助!

library(shiny)
library(DT)
library(data.table)

df <- data.frame(Key=c(1,1,2,2,3,3))

ui <- fluidPage(
  sliderInput("key","Key Value",min = 1,max = 3,value = c(1,3),step=1),
  dataTableOutput('my_dt')
)

server <- function(input, output, session) {
  output$my_dt <- renderDataTable({
    # produces wrong result; only 1 and 3.
    # df <- df[df$numbers %in% input$key,,drop=FALSE]
    # produces correct result; 1,2 and 3.
    # df <- df[df$Key %inrange% input$key,,drop=FALSE]
    # Also produces correct result; 1,2 and 3. No data.table needed.
    df <- df[df$Key >= input$key[1] & df$Key <= input$key[2],,drop=FALSE]
  })
}

# Run the application 
shinyApp(ui = ui, server = server)

推荐阅读