r - 开发sliderInput的最小值/最大值的 react 性变化

标签 r render shiny dplyr

感谢 solution我终于弄清楚了如何创建动态 SliderInput 按钮。不幸的是,我在使用这个 input 时遇到了问题毕竟值(更改 dplyr 中的子集条件)。谁能告诉我我做错了什么?

ui.R

library(dplyr)
library(shiny)
library(ggvis)

shinyUI(fluidPage(

titlePanel("Old Faithful Geyser Data"),

# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
  radioButtons("dataset", label = h4("Product level"),
               choices = list("Item" = "df1", "Task" = "df2")),
  uiOutput("slider")
  ),
mainPanel(
  ggvisOutput("plot")
   )
 )
))

服务器.R
 library(shiny)
 library(dplyr)

 df1 <- data.frame(id = c(1,2,3,4,5), number = c(20,30,23,25,34))
 df2 <- data.frame(id = c(1,2), number = c(33,40))

 shinyServer(function(input, output) {

 datasetInput <- reactive({
   switch(input$dataset,
         df1 = df1,
         df2 = df2)
 })

 output$slider <- renderUI({
   sliderInput("inslider","Slider", min   = min(datasetInput()$number), 
                                   max   = max(datasetInput()$number),
                                   value = c(min(datasetInput()$number),     
                                             max(datasetInput()$number))
 })
 data <- reactive({
  datasetInput %>%
    filter(number >= input$inslider[1],
           number <= input$inslider[2])
 })

 vis <- reactive({
  data %>%
   ggvis(~id, ~number) %>%
   layer_points(fill = ~factor(id)) %>%
   scale_nominal("fill", range = c("red","blue","green","yellow","black"))

 })
 vis %>% bind_shiny("plot") 
})

最佳答案

由于您使用的是 renderUI要制作 slider ,您必须检查 input$inslider在过滤数据之前存在。当你第一次加载它时,它不会因为它是由 renderUI 创建的。

为您的 server.R 试试这个:

library(shiny)
library(dplyr)

df1 <- data.frame(id = c(1,2,3,4,5), number = c(20,30,23,25,34))
df2 <- data.frame(id = c(1,2), number = c(33,40))

shinyServer(function(input, output) {

  datasetInput <- reactive({
    switch(input$dataset,
           "df1" = df1,
           "df2" = df2)
  })

  output$slider <- renderUI({
    sliderInput("inslider","Slider", min   = min(datasetInput()$number), 
                max   = max(datasetInput()$number),
                value = c(min(datasetInput()$number),     
                          max(datasetInput()$number))
  )})


  data <- reactive({
    filteredData<-datasetInput()
    if(!is.null(input$inslider)){
      filteredData<-filteredData %>%
      filter(number >= input$inslider[1] ,
             number <= input$inslider[2] )
    }
    filteredData
    })

  vis <- reactive({

    data()%>%
      ggvis(~id, ~number) %>%
      layer_points(fill = ~factor(id)) %>%
      scale_nominal("fill", range = c("red","blue","green","yellow","black"))

  })
  vis %>% bind_shiny("plot") 

})

关于r - 开发sliderInput的最小值/最大值的 react 性变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28427720/

相关文章:

r - 可拖动交互式条形图 R Shiny

r - 基于前三个数字的子集

r - 如何编辑校准图的图例?

perl - Catalyst Template::Toolkit 渲染输出

java - JComboBox 中每个项目的多种颜色

r - 在 Shiny 的仪表板 R 中动态绘制多个变量

r - 将信头添加到 RMarkdown PDF

r - "Error: object ' <myvariable >' not found"是什么意思?

python - 有没有好的Python库可以生成和渲染图像格式的文本?

r - 条件面板,其中条件是输入的长度