WedX - журнал о программировании и компьютерных науках

Приложение R Shiny — отключено от сервера. Перезагрузить.

Я пытаюсь обновить то, что было полностью функционирующим приложением 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")
    )
  )
)
```
23.06.2017

Ответы:


1

Одна из библиотек, которые я загружал для настоящего приложения, была с Github. Когда я использовал обходной путь, чтобы избежать загрузки этого пакета, приложение работало как локально, так и на ShinyApps.io.

23.06.2017
Новые материалы

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


Для любых предложений по сайту: [email protected]