我的 R 安装和包的详细信息是: 操作系统 macOS R v3.5.1 未来套餐-!这不适用于我的系统上安装的 R 版本
我尝试使用 API 调用函数使用 (HTTR:GET) 获取 json 数据。任务是有多个端点,应从R上提取数据以进行数据处理并最终创建Shiny App。
手头的问题是: 当前未来软件包不适用于 R3.5.1。我的行动步骤应该是什么?
你能确认我的代码是否正确吗: XYZ <- promise(GET(url, timeout(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 会话来执行程序。其他常用的计划是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()
之前,父级可以控制执行其他任务。
以下是所有这些调用以及更多内容的最佳参考:
- https://rstudio.github.io/promises/articles/futures.html
- https://cran.r-project.org/web/packages/future/vignettes/future-1-overview.html