R Shiny Асинхронное Программирование с использованием функции GET - PullRequest
0 голосов
/ 01 марта 2019

Подробности по моей установке и пакетам R: Пакет OS macOS R v3.5.1 Future -!Это недоступно для версии R, установленной в моей системе

Я пытаюсь получить данные JSON, используя функцию вызова API с использованием (HTTR: GET).Задача состоит в том, что существует несколько конечных точек, из которых данные должны быть извлечены на R для обработки данных и, в конечном итоге, для создания блестящего приложения.

В данный момент возникают следующие проблемы: Текущий будущий пакет недоступен для R3.5.1.Каким должен быть мой шаг действия?

Можете ли вы подтвердить правильность моего кода: XYZ <- обещание (GET (url, timeout (120))) </p>

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

Заранее спасибо.

1 Ответ

0 голосов
/ 01 марта 2019

Я не знаю о проблеме 3.5.1, но вот как вы запускаете задачи для асинхронного программирования, используя future и promises

library(promises)
library(future)
library(httr)

plan(multisession)


future(GET("http://slowwly.robertomurray.co.uk/delay/10000/url/http://www.google.co.uk"))%...>%print(.)
future(GET("http://slowwly.robertomurray.co.uk/delay/10/url/http://www.google.co.uk"))%...>%print(.)
future(GET("http://slowwly.robertomurray.co.uk/delay/10/url/http://www.google.co.uk"))%...>%print(.)
future(GET("http://slowwly.robertomurray.co.uk/delay/10/url/http://www.google.co.uk"))%...>%print(.)
future(GET("http://slowwly.robertomurray.co.uk/delay/10/url/http://www.google.co.uk"))%...>%print(.)

, это пример фиктивного API, запрашиваемого с помощьюсмоделированная задержка.

plan() устанавливает стратегию для оставшейся части программы.Здесь он установлен на multisession, который запускает отдельный R-сеанс для выполнения программы.Другие часто используемые планы: multicore (на Mac или Linux из-за fork) или multiprocess.Вы можете узнать о них больше с помощью ?plan

Специальный оператор %...>% - это некоторый синтаксический сахар, который в основном говорит программе печатать результат только после того, как обещание выполнено.До этого момента элемент управления возвращается родительскому процессу.

Следуя вашей нотации, вы также можете сделать это без пакета promisses.

a = future(GET("http://slowwly.robertomurray.co.uk/delay/10000/url/http://www.google.co.uk"))
value(a)

Здесь возвращается результат вызова APIтолько когда это закончено.До тех пор, пока не будет вызван value(), родитель имеет право выполнять другие задачи.

Вот лучший справочник для всех этих вызовов и более:

  1. https://rstudio.github.io/promises/articles/futures.html
  2. https://cran.r -project.org / web / packages / future / vignettes / future-1-Overview.html
...