2017-12-22 41 views
1

シンプルな光沢のあるアプリがあり、CSVファイル入力からポイントをプロットしています。現在、光沢のあるアプリにファイルをアップロードすると、マップは何もしません。これは、チラシマップがアップロードされているファイルに反応していないためだと思います。どうすればこの問題を解決できますか?シンプルなCSVファイルインプットに対応したリーフレットマップ

以下のコードを参照してください。サンプルデータはHEREです。

library(shiny) 
library(shinydashboard) 
library(leaflet) 
library(dplyr) 
library(htmltools) 

shinyApp(
    ui <- fluidPage(

    titlePanel("eBird Visualizer"), 
    fileInput("MyEBirdData_in", "MyEBirdData", buttonLabel = "Upload a .csv", 
       placeholder = "No File Selected...", width = "255px", 
       accept = ".csv"), 
    leafletOutput("myMap") 
), 

    server = function(input, output) { 

    output$contents <- renderTable({ 

     inFile <- input$MyEBirdData_in 
     if (is.null(inFile)) 
     return(NULL) 
     myData = read.csv(inFile$datapath, header = input$header) 

     df0 = data.frame(myData$Submission.ID, myData$Latitude, myData$Longitude) 
     df = unique(df0) 
     names(df)[2] = 'latitude' 
     names(df)[3] = 'longitude' 

    }) 

    output$myMap = renderLeaflet({ 

     leaflet(data = df) %>% addProviderTiles(providers$CartoDB.Positron) 
    }) 
    } 
) 
+0

あなたは[ 'reactiveValues'](https://shiny.rstudio.com/reference/shiny/latest/reactiveValues.html) – SBista

答えて

2

renderTableはUIに表示される反応性テーブルを作成するために使用されます。必要なのは、他の反応式で更新するために使用できる変数を持つことです。その場合は、reactiveまたはreactiveValueを使用する必要があります。たとえば、hereを参照してください。ページの下に2/3、最初にreactiveを紹介しています。

また、現在はinput$headerを参照していますが、これは定義されていません。したがって、csvをアップロードするときにエラーが発生します。

だから、このような何かを行うことができます:

library(shiny) 
library(shinydashboard) 
library(leaflet) 
library(dplyr) 
library(htmltools) 

shinyApp(
    ui <- fluidPage(

    titlePanel("eBird Visualizer"), 
    fileInput("MyEBirdData_in", "MyEBirdData", buttonLabel = "Upload a .csv", 
       placeholder = "No File Selected...", width = "255px", 
       accept = c(".csv","text/csv")), 
    leafletOutput("myMap") 
), 

    server = function(input, output) { 

    my_table <- reactive({ 

     inFile <- input$MyEBirdData_in 
     if (is.null(inFile)) 
     return(NULL) 

     myData = read.csv(inFile$datapath) 

     df0 = data.frame(myData$Submission.ID, myData$Latitude, myData$Longitude) 
     df = unique(df0) 
     names(df)[2] = 'latitude' 
     names(df)[3] = 'longitude' 
     print(df) 
     return(df) 
    }) 

    output$myMap = renderLeaflet({ 
     if(is.null(my_table())) 
     { 
     return(leaflet() %>% addProviderTiles(providers$CartoDB.Positron)) 
     } 
     else 
     { 
     leaflet(data = my_table()) %>% addProviderTiles(providers$CartoDB.Positron) %>% addMarkers() 
     } 
    }) 
    } 
) 
+0

これを使用することを検討すべきです偉大に見えるとはるかに意味がある、ありがとう。しかし、私は私のコードに書き込んで、アプリケーションを実行し、csvをアップロードしようとすると、それは私にエラーを与える:無効な引数の種類。実際にどこで/これが起こっているのかはわかりません。 – Heliornis

+0

こんにちは、私はチェックしていないあなたのコードでいくつかの他の問題。私は明日あなたのために確認します – Florian

+0

答えを修正しました、これは問題を解決するはずです。 – Florian