我的 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 问题,但以下是如何使用 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 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()
之前,父级可以控制执行其他任务。
以下是所有这些调用及更多内容的最佳引用:
关于使用 GET 函数的 R Shiny 异步编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54934899/