2016-04-22 6 views
1

私はいくつかの関連するデータを持つ地図上に点の束を持っています。Rの光沢とチラシの中の点を選んで選択する

まず、それらのポイントを属性でフィルタリングしたいと思います。それは正常に動作しますが、最近、私は、フィルタを使用してアプリケーションとフィドルを実行すると、最終的には、以前にフィルタリングされたポイントを削除し、ちょうど新しいフィルタリングされたポイントを上にロードします。これは、フィルターを約10回調整した後に起こっています。あたかもclearMarkers()関数が機能しなくなったかのようです。また、フィルタリングされたデータは、data.table(この部分はうまく動作し、例には含まれていません)にも表示されます。

第2に、ポイントをクリックして選択する必要があります。選択されたポイントからのデータは後でいくつかのグラフに入ります。私は間違いなく一つの点を選択することができますが、私はすべてのクリックされた点の反応変数を維持するのに問題があります。また、選択したポイントは、再度クリックすると選択解除されます。選択されたポイントは、マップ上で強調表示され(より明るいマーカーを追加することによって)、反応性のあるデータテーブル内で選択され、選択はマップのクリックに続いて更新され、テーブル内でクリックされます。しかし、それはいくつかのステップを踏んでいる。

ここでは動作しないサンプルコードを示します。

library(sp) 
library(leaflet) 
library(shiny) 

data <- data.frame(x = c(10,20,30,10,40), y = c(20,20,10,30,30), z = c(1,2,3,4,5)) 
points <- SpatialPointsDataFrame(data[,1:2],data[3]) 

server <- function(input, output, session) { 
    filtered <- reactive({ 
    z.in <- input$z 
    points[[email protected]$z > z.in,] 
    }) 
    selected <- reactiveValues() 
    output$map <- renderLeaflet({leaflet()}) 
    observe({ # This observer works, but it seems to stop working about about 10 tries 
    leafletProxy("map") %>% 
     clearMarkers() %>% 
     addCircleMarkers(data = filtered()) 
    }) 
    observe({ # This observer does not work, and the app won't run unless you comment it out 
    clicked <- unlist(input$map_marker_click[3:4]) 
    if (is.na(clicked)) {selected <- clicked} 
    else if (clicked %in% selected) {selected <- selected[-clicked]} 
    else {selected <- append(selected, clicked)} 
    }) 
} 

ui <- bootstrapPage(
    tags$style(type = "text/css", "html, body {width:100%;height:100%}"), 
    leafletOutput("map", width = "100%", height = "100%"), 
    absolutePanel(top = 10,left = 10, 
       sliderInput("z", "z",0,6,0) 
)) 

shinyApp(ui = ui, server = server) 

答えて

関連する問題