2013-10-20 50 views

回答

1

编辑:此功能已在opencpu.js 0.3中得到了改进。您现在可以使用`opencpu.seturl()设置opencpu服务器的路径。参数必须指向一个包,例如:

opencpu.seturl("/ocpu/library/mypackage/R") 

,或者如果你的浏览器支持CORS你可以这样做:

opencpu.seturl("//public.opencpu.org/ocpu/library/mypackage/R") 

opencpu.seturl("//public.opencpu.org/ocpu/github/yourname/yourpackage/R") 

设置在此之后,客户端将检查这个服务器是否在线,并打印一些调试的东西到JavaScript控制台。如果一切正常,您可以使用库,就像它是应用程序的一部分一样。看看http://www.stat.ucla.edu/~jeroen/appdemo/看到这个在行动。

也就是说,opencpu.js库被设计为包含在应用程序中。 OpenCPU应用程序是一个R包,它包含一些使用OpenCPU API调用包中的R函数的网页。

因为应用程序是已经安装到OpenCPU服务器上R封装,所述opencpu.js文库假定服务器的当前主机上运行,​​并且使用相对路径来调用服务器。此外,由于opencpu.js包含在特定的R程序包中,所以opencpu.js中的函数对于指定程序包没有任何参数:它假定您正在调用R函数当前的程序包

这听起来有点让人困惑,但相对路径对于保持应用程序的可移植性非常重要。例如,在相同的应用程序应该无论工作是否托管为:

https://public.opencpu.org/ocpu/gitstats/www 
https://public.opencpu.org/ocpu/github/SChamberlain/gitstats/www/ 
https://public.opencpu.org/ocpu/user/jeroen/library/gitstats/www/ 

这种设计的最大好处是,你的[R包将是一个自包含的,独立的应用程序,它可以在任何地方简单地部署通过安装包装。这可以避免跨域请求和软件版本控制带来的麻烦。由于您的网页和R功能是同一个软件包的一部分,因此您可以确保js和R代码包含兼容版本。如果您要在单独的服务器上托管js,那么安装新版本的R包时可能会中断服务。

也许最好的入门方法是看看其中一个public apps。这些应用程序的源代码可在opencpu github repo上找到,每个应用程序都建立在opencpu.js库上。

+0

感谢您的回复。你所描述的是有道理的。但是,这不是我们如何使用OpenCPU。事实上,我们正是在'1.2在一个团队中使用OpenCPU'中描述的。我们有数据分析人员编写所有的R并部署到我们的OpenCPU服务器,我们有编写JavaScript并部署到不同服务器的Web程序员。我们喜欢独立更新+部署JavaScript和R.保持JavaScript与R之间的契约并不是问题。但是,我们正在开发自动化测试来验证这是否可以确保。 –

+0

我更新了答案。如果您向我发送电子邮件,我很乐意讨论您的使用案例并提供更具体的建议。 – Jeroen