使用 GET 函数的 R Shiny 异步编程

标签 r asynchronous shiny promise httr

我的 R 安装和软件包的详细信息是: 操作系统 macOS R v3.5.1 future 套餐-!这不适用于我的系统上安装的 R 版本

我尝试使用 API 调用函数(HTTR:GET)获取 json 数据。任务是从多个端点将数据拉到 R 上进行数据处理并最终创建 Shiny App。

当前的问题是: 当前的 future 包不适用于 R3.5.1。我的行动步骤应该是什么?

您能否确认我的代码是否正确: XYZ <- promise (GET(url, 超时(120)))

第三,如果异步编程必须包含多个端点,我应该如何开发脚本。一个小例子将会有所帮助并提供方向。

提前谢谢您。

最佳答案

我不知道 3.5.1 问题,但以下是如何使用 futurepromises 启动异步编程任务

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 session 来执行程序。其他常用的计划是多核(在 Mac 或 Linux 上,因为 fork)或多进程。您可以通过?plan了解更多信息

特殊的 %...>% 运算符是一些语法糖,它基本上告诉程序仅在 promise 解决后才打印结果。至此控制权返回给父进程。

按照您的注释,您也可以在没有 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

关于使用 GET 函数的 R Shiny 异步编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54934899/

相关文章:

r - 如何使用多个模式执行 "find and replace"以在 R 中的字符串中找到

r - 使用 ddply 汇总不同范围列值的数据

arrays - 数组操作给我合并表

scala - 使用 Netty 和 Scala Actor 的异步 http 请求

javascript - 如何在 Shiny 中获得一个按钮来并行调用 JavaScript 和 R 代码?

r - 传单 renderLeaflet 在 Shiny 时不起作用

r - 如何控制 ggarrange 中其中一个绘图上的刻度线/y 轴值的数量?

javascript - 什么是延迟api调用的好方法?

javascript - 使用 AJAX 进行异步请求

r - 使用桥接适配器在虚拟机上配置我的 Shiny 服务器时出现问题