【问题标题】:R-shiny: Varying Slider input rangeR-shiny:可变滑块输入范围
【发布时间】:2015-10-16 14:09:00
【问题描述】:

我正在使用闪亮的传单来绘制地图。我正在通过selectInput 函数动态获取地图输入。我采用的所有矩阵都有不同的维度。现在我想通过sliderInput 函数限制行数。

为此,我想确保 range("selected") = range("sliderInput)。

为此可以采用以下数据输入:
数据输入

library(data.table)

    mat1 = data.table(long = runif(40, -87, -80), lat = runif(40, 25, 42), name = letters, state= letters) 
    mat2 = data.table(long = runif(9123, -87, -80), lat = runif(40, 25, 42), name = letters, state= letters) 
    mat3 = data.table(long = runif(722, -87, -80), lat = runif(40, 25, 42), name = letters, state= letters) 
    phys_summ = data.table(long = runif(9845, -87, -80), lat = runif(40, 25, 42), name = letters, state= letters) 
    mat4 = data.table(long = runif(99999, -87, -80), lat = runif(40, 25, 42), name = letters, state= letters) 

知道我该怎么做吗?

首次编辑
我的 r 代码动态地采用矩阵。但滑块输入无法正常工作:
R 代码:

  library(shiny)
    library(leaflet)
    {r, echo=FALSE, warning=FALSE, message=FALSE}
r_colors <- rgb(t(col2rgb(colors()) / 255))
names(r_colors) <- colors()
var=c("matrix 1" = "mat1", 
      "matrix 2" = "mat2",
      "matrix 3" = "mat3", 
      "matrix 4 " =  "mat4" )

shinyApp(
  ui =shinyUI(fluidPage(

    # Sidebar with a slider input for number of bins
    sidebarPanel(
      selectInput("pid", "1. Select the providers ", var, selected= "mat1", selectize = TRUE ),
      br(),
      #sliderInput("bins", "2, Select the number of BINs for Map", min = 5, max = nrow(get(var$input)), value=10)
      # radioButtons("color", "3, Select the color of histogram", choices =c("Green", "Red", "Yellow"), selected= "Green")
    ),
    # Show a plot of the generated distribution
    mainPanel(
      tabsetPanel(type = "tabs", 
                  tabPanel('Leaflet Map', leafletOutput("leaflet_map")),
                  tabPanel('Circular Map', leafletOutput("circular_map"))
      )))),
  server = shinyServer(function(input, output) {
    output$leaflet_map <- renderLeaflet({
      maptab <- get(input$pid)
      m <- leaflet() %>%
        addTiles() %>%  # Add default OpenStreetMap map tiles
        addMarkers(lng=maptab[,'long'][1:input$bins], lat=maptab[,'lat'][1:input$bins],popup=maptab[,'name'])
      m  # Print the map
    })
    ### Top Doctors circular map
    output$circular_map <- renderLeaflet({
      maptab <- get(input$pid)
      m = leaflet() %>% addTiles()
      df = data.frame(
        lng=maptab[,'long'][1:input$bins], 
        lat=maptab[,'lat'][1:input$bins],
        size = runif(input$bins, 5, 20),
        category = factor(maptab[,'state']),
        color = sample(colors(), input$bins)
      )
      m = leaflet(df) %>% addTiles()
      m %>% addCircleMarkers(radius = runif(input$bins, 4, 10), color = c('red','blue','green'))
    })
  }) 

)

【问题讨论】:

  • 你能展示你的 ui.R 和 server.R 代码吗,或者至少可以看到你现在用这部分做什么?
  • 另外,this page 提供了有关构建反应式控件的有用讨论。它可能会回答你的问题。
  • @ulfelder:我自己添加了有问题的代码。请看一看。

标签: r leaflet shiny-server shiny


【解决方案1】:

您需要在 server.R 的 shinyServer({}) 部分中使用 renderUI({}) 来创建依赖于在服务器进程中创建的对象的控制器,然后在 ui.R 的正确位置使用 uiOutput() 来显示它控制器。因此,使用您的脚本,这将嵌套在 shinyServer 中,与您的其他输出生成步骤处于同一级别:

output$setSlider <- renderUI({

    sliderInput("bins", "2, Select the number of BINs for Map",
        min = 5, max = nrow([selected data frame]), value=10)

})

然后这将进入滑块控制代码所在的 ui.R:

uiOutput("setSlider")

【讨论】:

  • 我收到以下错误:$ 运算符对原子向量无效
  • 是的,看起来你在这个过程中还有其他一些错误,包括这个 renderUI({}) 块正在寻找一个名为“输入”的变量 var 没有存在。如果你可以让它指向一个有效的目标,它应该可以工作。也许您想在映射位之外选择数据框作为自己的reactive({}) 步骤?
猜你喜欢
  • 2016-11-06
  • 2021-10-12
  • 2021-08-22
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
  • 2018-09-22
  • 1970-01-01
相关资源
最近更新 更多