Я пытаюсь обновить то, что было полностью функционирующим приложением R Shiny, с помощью функции, которая позволяет пользователям выбирать местоположения на карте для отображения результатов (ранее пользователям приходилось выбирать местоположения из длинного списка имен). Я следовал этому полезному примеру, https://uasnap.shinyapps.io/ex_leaflet/.
Все отлично работает локально, но не когда я публикую его наshinyapps.io, https://jvadams.shinyapps.io/StreamShot/. Я получаю сообщение Disconnected from the server. Reload.
Если я щелкну правой кнопкой мыши в окне (я использую Chrome версии 58.0.3029.110) и выберу Inspect
и посмотрю на вкладку консоли, я увижу предупреждающее сообщение [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
Любой совет, как решить эту проблему ?
Я получаю такое же сообщение Disconnected from the server. Reload.
, когда пытаюсь открыть приложение в Internet Explorer (версия 11.0.9600.18697). Но когда я щелкаю правой кнопкой мыши Inspect
и смотрю на вкладку консоли, у меня нет ошибок или предупреждений.
Я немного поискал в сети. Я нашел предложение изменить аргумент selectize
в selectInput
на FALSE
(по умолчанию он установлен на TRUE
), но это не помогло. Я нашел несколько других сообщений, но они не имеют для меня смысла... вещи об ajax и jquery, которых я не понимаю.
Я подготовил очень упрощенный пример приложения, чтобы воспроизвести проблему для публикации здесь, но упрощенное приложение работает без проблем, https://jvadams.shinyapps.io/Testing/. Я думаю, это неудивительно, так как пример, над которым я работаю, также был размещен на ShinyApps.io, и, похоже, он работает нормально.
В чем разница между реальной вещью и упрощенным примером? Настоящая вещь имеет еще 3 фрейма данных, каждый фрейм данных имеет гораздо больше записей (максимальное количество строк ~ 30 000), больше графиков (10-15 графиков на страницу с вкладками с использованием tabsetPanel()
и tabPanel()
), и есть несколько таблиц данных, слишком. Настоящая вещь также имеет несколько plotly
сюжетов. Но все эти графики и таблицы в действительности основаны на единственном выборе местоположения из карты или списка, как и в простом примере.
Может ли моя скорость соединения быть проблемой? Я использую точку доступа 4G своего мобильного телефона для подключения к Интернету (скорость 31 Мбит/с согласно https://fast.com/).
Я использую R версии 3.4.0 (21 апреля 2017 г.), RStudio версии 1.0.143, на ПК с процессором Intel(R) Core(TM) i7-4600m, процессором 2,90 ГГц, 16,0 ГБ ОЗУ и Microsoft Операционная система Windows 7 Корпоративная 2009 с пакетом обновления 1.
Код Rmarkdown (*.Rmd) для простого примера полностью показан ниже:
---
output: html_document
runtime: shiny
---
```{r setup, include=FALSE, echo=FALSE}
knitr::opts_chunk$set(warning=FALSE, message=FALSE, echo=FALSE)
```
```{r}
# non reactive stuff
library(leaflet)
library(rbokeh)
library(tidyverse)
locs <- structure(list(loc = c("S-US-611: BAD RIVER", "H-US-216: TROUT RIVER",
"M-US-67: GIERKE CREEK", "H-US-71: TROUT CREEK", "S-US-13: PENDILLS CREEK",
"O-US-67: RICE CR.", "M-US-271: EPHRAIM CREEK", "M-US-674: GIBSON CREEK (HALFWAY CREEK)",
"S-US-64: SUCKER RIVER", "M-US-339: EAST TWIN RIVER"), lon = c(-90.652399,
-83.826602, -86.336641, -84.103548, -84.819236, -76.56845, -87.179319,
-86.206658, -85.942378, -87.563722), lat = c(46.637999, 45.428862,
45.849507, 45.979098, 46.443969, 43.443795, 45.148478, 42.719827,
46.674155, 44.151644), le = c(1.10611, 3.10216, 2.10067, 3.10071,
1.10013, 5.10067, 2.10271, 2.10674, 1.10064, 2.10339)), .Names = c("loc",
"lon", "lat", "le"), row.names = c(NA, -10L), class = "data.frame")
row.names(locs) <- locs$loc
chem <- structure(list(le = c(1.00093, 1.00093, 1.00093, 1.00093, 1.00093,
1.00093, 1.00093, 1.00093, 1.00093, 1.00116, 1.00116, 1.00116,
1.00116, 1.00116, 1.00301, 1.00301, 1.00301, 1.00301, 1.00301,
1.00301, 1.00301, 1.00374, 1.00374, 1.00374, 1.00374, 1.00374,
1.00374, 1.00374, 1.00374, 1.00374, 1.00374, 1.00374, 1.00374,
1.00374, 1.10013, 1.10013, 1.10013, 1.10013, 1.10013, 1.10013,
1.10015, 1.10064, 1.10064, 1.10064, 1.10064, 1.10064, 1.10064,
1.10064, 1.10064, 1.10064, 1.10064, 1.10064, 1.10064, 1.10064,
1.10064, 1.10064, 1.10064, 1.10064, 1.10064, 1.10064, 1.10064,
1.10064, 1.10064, 1.10064, 1.10064, 1.10064, 1.10064, 1.10064,
1.10064, 1.10064, 1.10064, 1.10064, 1.10611, 1.10611, 1.10611,
1.10611, 1.10611, 1.10611, 1.10611, 1.10611, 1.10611, 1.10611,
1.10611, 1.10611, 1.10611, 1.10611, 1.10611, 1.10611, 1.10611,
1.10611, 1.10611, 1.10611, 1.10611, 2.10271, 2.10339, 2.10339,
2.10339, 2.10339, 2.10339, 2.10339, 2.10339, 2.10339, 2.10523,
2.10523, 2.10523, 2.10523, 2.10523, 2.10523, 2.10523, 2.10523,
2.10523, 2.10523, 2.10523, 2.10523, 2.10523, 2.10674, 2.10674,
3.10071, 3.10071, 3.10071, 3.10071, 3.10071, 3.10071, 3.10071,
3.10071, 3.10071, 3.10071, 3.10071, 3.10071, 3.10202, 3.10202,
3.10202, 3.10202, 3.10202, 3.10202, 3.10202, 3.10202, 3.10202,
3.10202, 3.10202, 3.10202, 3.10202, 3.10202, 3.10202, 3.10202,
3.10202, 3.10202, 3.10202, 3.10202, 3.10202, 3.10216, 3.10216,
3.10216, 3.10216, 3.10216, 3.10216, 3.10216, 3.10216, 3.10216,
3.10216, 3.10216, 3.10216, 3.10216, 3.10216, 3.10216, 3.10296,
3.10296, 3.10296, 3.10296, 3.10296, 3.10296, 3.10296, 3.10296,
3.10296, 3.10296, 3.10296, 3.10296, 3.10296, 3.10296, 3.10296,
5.10067, 5.10071, 5.10071, 5.10071, 5.10071, 5.10071, 5.10071,
5.10071, 5.10071, 5.10071, 5.10071), year = c(1962L, 1966L, 1971L,
1975L, 1984L, 1997L, 2001L, 2008L, 2012L, 1991L, 1995L, 1999L,
2004L, 2009L, 1963L, 1966L, 1971L, 1978L, 1988L, 2005L, 2012L,
1963L, 1967L, 1971L, 1975L, 1978L, 1982L, 1986L, 1990L, 1994L,
1999L, 2003L, 2007L, 2009L, 1959L, 1963L, 1973L, 1982L, 1988L,
2012L, 2012L, 1958L, 1959L, 1961L, 1963L, 1965L, 1967L, 1969L,
1971L, 1972L, 1973L, 1974L, 1975L, 1977L, 1979L, 1980L, 1981L,
1982L, 1983L, 1984L, 1985L, 1986L, 1987L, 1989L, 1990L, 1992L,
1994L, 1996L, 1998L, 2002L, 2006L, 2010L, 1960L, 1963L, 1964L,
1968L, 1969L, 1971L, 1973L, 1977L, 1978L, 1980L, 1984L, 1988L,
1991L, 1995L, 1998L, 2001L, 2003L, 2005L, 2007L, 2008L, 2011L,
1963L, 1975L, 1979L, 1982L, 1987L, 1995L, 2000L, 2004L, 2008L,
1963L, 1967L, 1971L, 1974L, 1978L, 1983L, 1987L, 1991L, 1995L,
1999L, 2002L, 2006L, 2010L, 1965L, 1984L, 1966L, 1970L, 1972L,
1973L, 1975L, 1979L, 1984L, 1989L, 1994L, 2001L, 2005L, 2009L,
1968L, 1972L, 1974L, 1976L, 1977L, 1979L, 1980L, 1982L, 1984L,
1985L, 1986L, 1988L, 1991L, 1993L, 1994L, 1997L, 1998L, 2002L,
2008L, 2009L, 2012L, 1967L, 1970L, 1974L, 1978L, 1982L, 1985L,
1989L, 1993L, 1997L, 2000L, 2004L, 2005L, 2006L, 2007L, 2011L,
1969L, 1972L, 1975L, 1979L, 1980L, 1983L, 1985L, 1989L, 1993L,
1997L, 2000L, 2002L, 2006L, 2008L, 2011L, 1972L, 1978L, 1982L,
1985L, 1988L, 1991L, 1995L, 1998L, 2002L, 2005L, 2011L), alk.mgl = c(33,
27, 20, 26, 14, 27, 51, 28, 26, 19, 20, 22, 27, 20, 78, 78, 68,
73, 71, 83, 73, 27, 19, 27, 18, 15, 12, 13, 15, 12, 30, 17, 12,
37, 38, 34, 34, 30, 36, 40, 62, 60, 68, 48, 66, 65, 56, 68, 48,
46, 50, 60, 70, 54, 56, 54, 76, 50, 24, 68, 62, 70, 80, 67, 71,
70, 62, 60, 61, 70, 77, 45, 46, 20, 56, 91, 50, 52, 46, 82, 54,
58, 82, 96, 86, 86, 99, 84, 86, 96, 67, 86, 99, 200, 175, 266,
256, 288, 280, 250, 202, 264, 142, 158, 150, 165, 182, 162, 148,
160, 158, 155, 150, 170, 160, 84, 68, 95, 58, 80, 116, 55, 55,
58, 36, 62, 60, 93, 80, 149, 159, 165, 164, 176, 150, 168, 154,
154, 166, 140, 148, 170, 160, 160, 155, 155, 163, 175, 155, 165,
145, 170, 190, 200, 164, 188, 188, 170, 130, 170, 160, 140, 150,
200, 170, 174, 182, 180, 197, 144, 154, 175, 180, 180, 178, 180,
180, 185, 185, 180, 70, 104, 137, 113, 133, 123, 147, 117, 101,
146, 125)), .Names = c("le", "year", "alk.mgl"), row.names = c(NA,
-191L), class = "data.frame")
```
```{r}
# reactive stuff
theworks <- reactive({
i <- input$location
pick <- locs$loc == i
j <- locs$le[pick]
# map data
infosub <- locs[pick, ]
# chemistry data
CHEMsub <- chem[chem$le==j, ]
list(infosub=infosub, CHEMsub=CHEMsub)
})
```
```{r}
# server
acm_defaults <- function(map, x, y) {
addCircleMarkers(map, x, y, radius=6, color="black",
fillColor="orange", fillOpacity=1, opacity=1, weight=2, stroke=TRUE,
layerId="Selected")
}
# map
output$Map <- renderLeaflet({
leaflet() %>%
# Great Lakes centered
setView(lng=-84, lat=45, zoom=6) %>%
addTiles() %>%
addCircleMarkers(data=locs, radius=6, color="black", label=~loc,
stroke=FALSE, fillOpacity=0.5, group="locations", layerId=~loc)
})
# update the map markers and view on map clicks
observeEvent(input$Map_marker_click, {
p <- input$Map_marker_click
proxy <- leafletProxy("Map")
if(p$id=="Selected"){
proxy %>%
removeMarker(layerId="Selected")
} else {
proxy %>%
setView(lng=p$lng, lat=p$lat, input$Map_zoom) %>%
acm_defaults(p$lng, p$lat)
}
})
# update the location selectInput on map clicks
observeEvent(input$Map_marker_click, {
p <- input$Map_marker_click
if(!is.null(p$id)) {
if(is.null(input$location) || input$location!=p$id) {
updateSelectInput(session, "location", selected=p$id)
}
}
})
# update the map markers and view on location selectInput changes
observeEvent(input$location, {
p <- input$Map_marker_click
p2 <- subset(locs, loc==input$location)
proxy <- leafletProxy("Map")
if(nrow(p2)==0) {
proxy %>%
removeMarker(layerId="Selected")
} else {
if(length(p$id) && input$location!=p$id) {
proxy %>%
setView(lng=p2$lon, lat=p2$lat, input$Map_zoom) %>%
acm_defaults(p2$lon, p2$lat)
} else {
if(!length(p$id)) {
proxy %>%
setView(lng=p2$lon, lat=p2$lat, input$Map_zoom) %>%
acm_defaults(p2$lon, p2$lat)
}
}
}
})
output$alk <- renderRbokeh({
df <- theworks()$CHEMsub
if(dim(df)[1] > 0) {
figure() %>%
ly_points(df$year, df$alk.mgl)
} else {
return()
}
})
```
```{r}
# ui
fluidPage(
fluidRow(
column(4,
h4(strong("Select stream from list or map")),
selectInput("location", "", c("", locs$loc), selected=""),
br(),
h4("Alkalinity"),
rbokehOutput("alk")
),
column(7,
p("(Hover to see identities of other streams.)"),
leafletOutput("Map", width="510px", height="510px")
)
)
)
```