【发布时间】:2019-06-06 05:53:24
【问题描述】:
我正在使用来自https://www.kaggle.com/c/bike-sharing-demand 的 Bikesharing 数据构建我的第一个 Shiny 交互式应用程序。用户可以使用单选按钮选择“起点站”或“终点站”,然后应该在地图上接收圆形标记,其半径是某个自行车站是某一天旅行的起点/终点。
我有一个包含行程数据的数据框 (df.trip) 和一个包含每个站点坐标的数据框 (df.station)。根据用户的选择,我将不得不使用“from_station_id”或“to_station_id”离开加入 df.station,以便找到起点/终点站的坐标。
我已经在 UI 中实现了单选按钮并且已经有了日期功能。但是,我尝试了许多选项来获得一个响应式 if 语句,该语句根据用户选择在不同的键上连接数据帧。在 if 中还有其他反应性语句。下面提供的是服务器的一部分。
我收到了
Error in .getReactiveEnvironment()$currentContext() :
Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)
station_type <- reactive({
if (toString(input$station)=="Start Station") {
return(TRUE)
} else {
return(FALSE)
}
})
if (station_type() == TRUE) {
filtered <- reactive({
df.trip %>%
filter(format(df.trip$starttime,"%Y-%m-%d") == input$date) %>%
group_by(from_station_id) %>%
summarize(n_trips = n())
)}
tmp.df <- reactive({
left_join(filtered(), df.station, by = c("from_station_id" = "station_id"))
})
leaflet(tmp.df()) %>%
addTiles(group="OSM") %>%#OSM is default tile providor
addProviderTiles(providers$CartoDB.Positron) %>%
setView(
lng=-122.335167,
lat=47.608013,
zoom=12
)%>%
addCircleMarkers(lng = ~long, lat = ~lat, weight = 1,label=~name,
radius = ~n_trips)
}
else {
filtered <- reactive({
df.trip %>%
filter(format(df.trip$starttime,"%Y-%m-%d") == input$date) %>%
group_by(to_station_id) %>%
summarize(n_trips = n())
)}
tmp.df <- reactive({
left_join(filtered(), df.station, by = c("to_station_id" = "station_id"))
})
leaflet(tmp.df()) %>%
addTiles(group="OSM") %>%#OSM is default tile providor
addProviderTiles(providers$CartoDB.Positron) %>%
setView(
lng=-122.335167,
lat=47.608013,
zoom=12
)%>%
addCircleMarkers(lng = ~long, lat = ~lat, weight = 1,label=~name,
radius = ~n_trips)
}
})````
【问题讨论】:
标签: r dataframe shiny reactive