Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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中,如何分离滑块输入值并使用它们进行过滤_R_Widget_Shiny - Fatal编程技术网

在R中,如何分离滑块输入值并使用它们进行过滤

在R中,如何分离滑块输入值并使用它们进行过滤,r,widget,shiny,R,Widget,Shiny,在R的shinny包中,您可以使用具有上限和下限的sliderInput创建一个滑块小部件 在将数据传递到UI.R之前,我希望能够分离上限值和下限值,并用它们过滤一列数据 例如: Server.R library(shiny) data <- read.csv('some_data_to_filter.csv') # Define server logic for slider examples shinyServer(function(input, output) { # Rea

在R的
shinny
包中,您可以使用具有上限和下限的
sliderInput
创建一个滑块小部件

在将数据传递到
UI.R
之前,我希望能够分离上限值和下限值,并用它们过滤一列数据

例如:

Server.R

library(shiny)
data <- read.csv('some_data_to_filter.csv')

# Define server logic for slider examples
shinyServer(function(input, output) {

  # Reactive expression to compose a data frame containing all of
  # the values
  sliderValues <- reactive({

    # Compose data frame
    data.frame(
      Name = c("Range"),
      Value = as.character(c(paste(input$range, collapse=' '),)), 
      stringsAsFactors=FALSE)
  }) 

  # Show the values using an HTML table
  output$values <- renderTable({
    sliderValues()
  })
})
library(shiny)    
# Define UI for slider demo application
shinyUI(fluidPage(

  #  Application title
  titlePanel("Sliders"),

  sidebarLayout(
    sidebarPanel(      
  # Specification of range within an interval
      sliderInput("range", "Range:",
                  min = 1, max = 1000, value = c(200,500))
),

    # A table summarizing the values entered
    mainPanel(
      tableOutput("values")
    )
  )
))
在上面的例子中,我读取了数据,我有一个滑块,但是没有像我希望的那样过滤数据

这是我进行拆分和筛选的最佳尝试,但它引发了一个错误:

myrange <- reactive({ data.frame(strsplit(Value = input$slider))})
data <- data[data$colname <= as.numeric(myrange[2]),]
data <- data[data$colname >= as.numeric(myrange[2]),]

myrange如果我正确理解您的问题,您希望根据滑块输入右侧的两个限制对数据进行子集。如果是这样,请使用下面的解决方案和示例数据

library(shiny)

# Sample Data
area <- seq(from=10,to=100, by=10);peri <- seq(from=2710.1,to=2800.1, by=10)
shape <- seq(from=0.1,to=1, by=0.1);perm <- seq(from=1,to=100, by=10)
my_data <- as.data.frame(cbind(area,peri,shape,perm))

ui = fluidPage(
  sidebarPanel(sliderInput("range", "Select Range",min = 1, max = 10, value = c(2, 5)),width = 3),
  mainPanel(tableOutput("view"))
)

server = function(input, output) {
  output$view <- renderTable({
    test <- my_data[input$range[1]:input$range[2],]
    test},include.rownames=FALSE)
}
runApp(list(ui = ui, server = server)) 
库(闪亮)
#样本数据

区域为什么需要
strsplit
input$slider
,它不是字符向量?其思想是分割生成的字符串,而是分割滑块范围。滑块对象生成的范围/字符串如下所示
“50 100”
。通过使用
data.frame(unlist(strsplit())
您通常可以将其转换为R中向量的单独元素,但是,这是被动的事实使事情变得复杂。你知道有什么方法可以将这两个数字从
input$slider
中分离出来,这样它们就可以用来子集数据了吗?我想你真的不需要它
input$range
已经是长度为2的数字向量,包含最小值和最大值,例如
num[1:2]200 614
。这意味着
input$range[1]
input$range[2]
将为您提供左右滑块值。好的,太好了!我想我们几乎找到了一个解决方案,但当我像这样尝试
data时,请注意,您同时使用
data
作为数据集(
data)的名称