Я создаю свое первое блестящее интерактивное приложение на данных о совместном использовании велосипедов из https://www.kaggle.com/c/bike-sharing-demand.. Пользователь может выбрать «Начальная станция» или «Конечная станция» с помощью радиокнопки, а затем должен получить круговые маркеры на карте с радиусом Подсчет определенной Станции Велосипеда был началом / концом поездки в определенный день.
У меня есть один кадр данных с данными о поездке (df.trip) и один кадр данных с координатами каждой станции (df.station). В зависимости от выбора пользователя, мне нужно будет оставить присоединение к df.station, используя 'from_station_id' или 'to_station_id', чтобы найти координаты начальной / конечной станции.
Я реализовал радиокнопки в пользовательском интерфейсе и уже имею функциональность даты. Тем не менее, я перепробовал много вариантов, чтобы получить реактивный оператор 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)
}
})````