Ошибка блестящего приложения при развертывании, работает локально (rvest - ›проблема с html_nodes)

У меня есть приложение Shiny, которое загружает zip-файл с сайта полицейского управления Атланты и распаковывает его во временный файл. Приложение работает нормально локально, но когда я развертываю его на shinyapps.io, я получаю сообщение об ошибке: could not find function "xpath_combinedselector"

Я связал это с вызовом пакета R «rvest», функции «html_nodes» (которая использует пакет «selectr» для преобразования селектора CSS в XML). Я думаю, что это как-то связано с версией на Shiny, но я застрял в том, как это исправить.

Для справки: сайт загрузки данных о преступлениях: http://www.atlantapd.org/crimedatadownloads.aspx и я работаю с zip-файлом внизу (обновляется еженедельно с другим URL-адресом): "Исходные данные файла данных о преступности 2009-20гг (мм / дд / гггг)"

Ошибка создания кода:

# load libraries (some of these are used later on in the app, but 
# included here in case they might be the cause)
library(shiny); library(lubridate); library(ggplot2)
library(ggmap); library(RgoogleMaps); library(readr)
library(rvest); library(dplyr)

# Set up temp file to download zip file to
temp <- tempfile()

# Download zip file from location on APD website, to above temp file
download.file(
   read_html("http://www.atlantapd.org/crimedatadownloads.aspx") %>% 
      # THE NEXT LINE IS THE PROBLEM CHILD
      html_nodes("tr:nth-child(15) a") %>% 
      html_attr("href") %>% 
      paste0("http://www.atlantapd.org/", .),
   destfile = temp)

Журнал ошибок блестящего приложения:

2016-05-21T19:47:43.603137+00:00 shinyapps[103450]: Warning: Error in do.call: could not find function "xpath_combinedselector"
2016-05-21T19:47:43.610211+00:00 shinyapps[103450]: Stack trace (innermost first):
2016-05-21T19:47:43.610213+00:00 shinyapps[103450]:     76: do.call
2016-05-21T19:47:43.610214+00:00 shinyapps[103450]:     75: .self$xpath
2016-05-21T19:47:43.610216+00:00 shinyapps[103450]:     74: selector_to_xpath
2016-05-21T19:47:43.610217+00:00 shinyapps[103450]:     73: FUN
2016-05-21T19:47:43.610218+00:00 shinyapps[103450]:     72: lapply
2016-05-21T19:47:43.610221+00:00 shinyapps[103450]:     69: <Anonymous>
2016-05-21T19:47:43.610222+00:00 shinyapps[103450]:     68: mapply
2016-05-21T19:47:43.610223+00:00 shinyapps[103450]:     67: Map
2016-05-21T19:47:43.610224+00:00 shinyapps[103450]:     66: selectr::css_to_xpath
2016-05-21T19:47:43.610225+00:00 shinyapps[103450]:     65: make_selector
2016-05-21T19:47:43.610226+00:00 shinyapps[103450]:     64: node_find_all
2016-05-21T19:47:43.610227+00:00 shinyapps[103450]:     63: xml_find_all.xml_node
2016-05-21T19:47:43.610220+00:00 shinyapps[103450]:     70: tran$css_to_xpath
2016-05-21T19:47:43.610230+00:00 shinyapps[103450]:     60: html_nodes
2016-05-21T19:47:43.610219+00:00 shinyapps[103450]:     71: sapply
2016-05-21T19:47:43.610232+00:00 shinyapps[103450]:     58: withVisible
2016-05-21T19:47:43.610233+00:00 shinyapps[103450]:     57: freduce
2016-05-21T19:47:43.610234+00:00 shinyapps[103450]:     56: _fseq
2016-05-21T19:47:43.610235+00:00 shinyapps[103450]:     55: eval
2016-05-21T19:47:43.610236+00:00 shinyapps[103450]:     54: eval
2016-05-21T19:47:43.610237+00:00 shinyapps[103450]:     53: withVisible
2016-05-21T19:47:43.610238+00:00 shinyapps[103450]:     52: %>%
2016-05-21T19:47:43.610231+00:00 shinyapps[103450]:     59: function_list[[k]]
2016-05-21T19:47:43.610229+00:00 shinyapps[103450]:     61: html_nodes.default
2016-05-21T19:47:43.610228+00:00 shinyapps[103450]:     62: xml2::xml_find_all
2016-05-21T19:47:43.610242+00:00 shinyapps[103450]:      9: tryCatchList
2016-05-21T19:47:43.610243+00:00 shinyapps[103450]:      8: tryCatch
2016-05-21T19:47:43.610244+00:00 shinyapps[103450]:      7: connect$retry
2016-05-21T19:47:43.610245+00:00 shinyapps[103450]:      6: eval
2016-05-21T19:47:43.610246+00:00 shinyapps[103450]:      5: eval
2016-05-21T19:47:43.610238+00:00 shinyapps[103450]:     13: runApp
2016-05-21T19:47:43.610247+00:00 shinyapps[103450]:      3: eval
2016-05-21T19:47:43.610239+00:00 shinyapps[103450]:     12: fn
2016-05-21T19:47:43.610240+00:00 shinyapps[103450]:     11: doTryCatch
2016-05-21T19:47:43.610241+00:00 shinyapps[103450]:     10: tryCatchOne
2016-05-21T19:47:43.610415+00:00 shinyapps[103450]: Error in do.call(method, list(parsed_selector)) : 
2016-05-21T19:47:43.610248+00:00 shinyapps[103450]:      2: eval.parent
2016-05-21T19:47:43.610247+00:00 shinyapps[103450]:      4: eval
2016-05-21T19:47:43.610249+00:00 shinyapps[103450]:      1: local

person Brent B    schedule 21.05.2016    source источник


Ответы (1)


Проблема заключается в том, что при предоставлении аргументов для функции html_node используется метод lazyeval. Эта функция имеет только один аргумент, css ИЛИ xpath.

Если вы не укажете тип аргумента, которым в вашем случае является селектор css, аргумент будет рассматриваться как xpath (поэтому вы получите error:could not find function "xpath_combinedselector"). Поэтому, чтобы быть уверенным, что блестящий сервер - при развертывании приложения - распознает указанный вами тип аргумента, вы должны указать как html_nodes аргументы следующим образом:

 html_nodes(css="tr:nth-child(15) a")
person Daoud Chahor    schedule 27.12.2016