Mit Rstudio versuche ich eine glänzende App zu erstellen, die Leaflet-Ausgaben produziert. Beachten Sie, dass "Glänzend" ein Paket ist, das ich vorher noch nicht verwendet habe. Es könnte also sein, dass es im Skript andere Fehler gibt als das, dem ich gerade begegne.Wie man einen Dataframe und einen Plot mit einem Leaflet abhängig von der Eingabe in einen glänzenden Bereich setzt
Ich benutze ein Datenframe mit Spuren von verschiedenen Individuen, von denen ich Teilmenge und die Spur eines Tieres als Reaktion auf Inputselection plotten möchte.
Sample:
WhaleID lat long
gm08_150c 68,4276 16,5192
gm08_150c 68,4337 16,5263
gm08_150c 68,4327 16,5198
gm08_154d 68,4295 16,5243
gm08_154d 68,4313 16,5314
gm08_154d 68,4281 16,5191
Die Auswahlmöglichkeiten in der Eingangswahl sind die genauen Namen in der CSV-Datei verwendet, in der Spalte WhaleID
, so würde ich die Teilmenge alle Zeilen mit diesen WhaleID
von dem Hauptdatenrahmen mag.
Nach dieser Teilmenge möchte ich nur die Spalten "long" und "lat" aus dem zuvor unterteilten Datenrahmen unterteilen. Dieser Datenrahmen wird dann per Prospekt gelesen.
Der letzte Schritt ist das Zeichnen dieser "langen" und "lat" Positionen auf einer Karte.
Ich erhalte eine Fehlermeldung leider:
Warning: Error in $: object of type 'closure' is not subsettable
Stack trace (innermost first):
82: inherits
81: resolveFormula
80: derivePolygons
79: addPolylines
78: function_list[[i]]
77: freduce
76: _fseq
75: eval
74: eval
73: withVisible
72: %>%
71: func [#15]
70: output$map
4: <Anonymous>
3: do.call
2: print.shiny.appobj
1: <Promise>
Das Skript Ich verwende:
require(shiny)
require(leaflet)
##Main dataframe I want to subset depending on inputselection
dataframe <-read.csv2("PW_with_speedbearingturn.csv")
ui <- bootstrapPage(
tags$style(type = "text/css", "html, body {width:100%;height:100%}"),
absolutePanel(top = 10, right = 10,
selectInput(inputId = "whaleID",
label = "Select a whale",
choices = c("gm08_150c","gm08_154d"))),
leafletOutput(outputId = "map", width = "100%", height = "700")
)
server <- function(input, output, session){
#?observeEvent
#observeEvent(input$whaleID,)
Start <- makeIcon(
iconUrl = "https://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Dark_Green_Arrow_Down.svg/480px-Dark_Green_Arrow_Down.svg.png",
iconWidth = 22, iconHeight = 20,
iconAnchorX = 11, iconAnchorY = 20)
eventReactive(input$whaleID,{
df<-subset(dataframe, WhaleID == "input$whaleID") ## "input$whaleID" should become the WhaleID that is selected from the inputselect.
df<-subset(df, select = c("long", "lat"))
})
output$map <- renderLeaflet({
leaflet() %>%
addTiles() %>%
addPolylines(df, lng = df$long, lat = df$lat, col = "grey", opacity = 1)%>%
addMarkers(df, lng = first(df$long), lat = first(df$lat), icon = Start, popup = "Start")
})
}
shinyApp(ui = ui, server = server)
Ich glaube, es mit dem eventreactive Abschnitt zu tun hat und der subsetting Teil innerhalb. Sie muss jedes Mal aktualisiert werden, wenn die Auswahl aus der Eingabeauswahl ausgewählt wurde. Leider konnte ich keine existenten Lösungen für diese Frage finden.
Gibt es Ratschläge zur Lösung dieses Problems?
Vielen Dank im Voraus,
Onno
Würde es helfen, eine Schicht für jede Wal-ID zu haben? Wenn ja, wie viele individuelle IDs hast du? – TimSalabim