我正在尝试使用 Rstudio 制作一个闪亮的应用程序来生成传单输出。请注意,shiny 是我以前从未使用过的包,因此脚本中可能存在除我当前遇到的错误之外的其他错误。
我正在使用一个包含不同个体轨迹的数据帧,我想从中子集并绘制一只动物的轨迹以响应输入选择。
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
输入选择中的选项是 .csv 文件中使用的确切名称,在列中WhaleID
,所以我想要所有行的子集WhaleID
来自主数据框。
在这个子集之后,我只想对先前子集化的数据帧中的“长”和“纬度”列进行子集化。然后由传单读取该数据帧。
最后一步是在地图上绘制这些“长”和“纬度”位置。
不幸的是我不断收到错误消息:
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>
我正在使用的脚本:
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)
我相信这与 eventreactive 部分和其中的子集部分有关。每次都必须更新它以响应从 inputselection 中选择的选项。不幸的是我找不到这个问题的任何现有解决方案。
关于如何解决这个问题有什么建议吗?
提前致谢,
Onno