我的R安装和软件包的详细信息是:OS macOS R v3.5.1 Future Package - !这不适用于我系统上安装的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
了解更多关于它们的信息
特殊的%...>%
运算符是一些语法糖,它基本上告诉程序只有在promise被解决后才打印结果。然后,控件返回到父进程。
根据您的表示法,您也可以在没有promisses
包的情况下执行此操作。
a = future(GET("http://slowwly.robertomurray.co.uk/delay/10000/url/http://www.google.co.uk"))
value(a)
这里API调用的结果仅在完成时返回。直到value()
被称为父母有控制权来执行其他任务。
以下是所有这些电话的最佳参考: