我已经看过很多关于从其他RESTful API服务中使用R来消费数据的文章,但我真的很难找到有关反向的任何文章.我对R是服务器感兴趣,而不是客户端.我想要一个Node.js应用程序来调用R服务器的RESTful API,这样我就可以利用特定的分析功能,例如多季节性预测.有人有主意吗?
最近我被指向http://opencpu.org/.漂亮的网站,但在浏览了一会儿后,我不太确定它在R风景中的位置与例如rApache或RPy2相比.
等了很长时间让服务器回来后我终于能够阅读架构部分了,但这并不太全面.我正在寻找有关OpenCPU是什么,如何使用它以及如何与现有工具(如rApache和RPy2)进行比较的更详细说明.
我们想在OpenCPU应用程序中显示一个htmlwidget.由Leaflet生成的html没有问题,但是我们在OpenCPU应用程序中显示它有一些麻烦.我们使用以下函数生成Leaflet Map:
leafmap1 <- function(ecoregion='10105',wdpa_id='1500'){
require(leaflet)
require(shiny)
require(htmlwidgets)
m <- leaflet() %>%
addTiles() %>% # Add default OpenStreetMap map tiles
addMarkers(lng=174.768, lat=-36.852, popup="The birthplace of R")
m
}
Run Code Online (Sandbox Code Playgroud)
JavaScript如下:
function SochiCtrl($scope){
$scope.ecoregions = ['10105']
$scope.wdpa_ids = ["1500"]
$scope.ecoregion = $scope.ecoregions[0]
$scope.wdpa_id = $scope.wdpa_ids[0]
$scope.makeChart = function(){
var req = ocpu.rpc("leafmap1",
{"ecoregion": $scope.ecoregion, "wdpa_id": $scope.wdpa_id}, function(output){
$('#map').html(output)
}).fail(function(text){
alert("Error: " + req.responseText);
});
}
$scope.$watchCollection('[ecoregion, wdpa_id]', function(newValues){
console.log(newValues)
$scope.makeChart({ecoregion: newValues[0], wdpa_id: newValues[1]})
})
}
Run Code Online (Sandbox Code Playgroud)
现在应用程序显示了Leaflet框架,但是我在从OpenCPU获取json时遇到了一些问题我得到了以下错误没有方法asJSON S3类:htmlwidget.我也尝试过:
m <- toJSON(m, …Run Code Online (Sandbox Code Playgroud) 在Spark中有一些访问R库的选项:
看起来SparkR非常有限,OpenCPU需要保留额外的服务,绑定可能会有稳定性问题.还有一些特定于Spark架构的东西使得使用任何解决方案都不容易.
您是否有任何积分R和Spark可以分享的经验?
我正在使用OpenCPU和R开发一个应用程序,我对两者都是全新的.我使用mongolite包连接到MongoDB.每次都有多次调用DB并连接,需要很长时间.加上数据处理,绘图等需要花费大量时间来加载具有生成的图的页面.在许多情况下,我必须绘制从多个集合中获取数据.
我注意到,我能够节省3-4秒(每个连接),如果我不连接每一次分贝,而使用现有连接.
如果有人能用最好的方法来指导我是否已经建立了与DB的连接,那将会很棒.
让我简要介绍一下到目前为止我做了什么!
这是我的connect_to_db.R文件
library(mongolite)
dbConnection <- NULL
connect_mongodb = function() {
db={
if(is.null(dbConnection)){ # connect to DB only if connection is NULL, else return global connection object
m <- mongo(collection = myCollection, db = myDb, url = myUrl)
assign("dbConnection", m, envir = .GlobalEnv)
}
return(dbConnection)
}
}
Run Code Online (Sandbox Code Playgroud)
它用于获取文件并从R控制台运行它.但是,当我在opencpu服务器中使用它时,我从另一个用于绘图的R方法调用connect_mongodb方法.我从javascript文件中调用绘图方法如下.
var req = $("#plot").rplot(myPlottingMethod, options).fail(function(){
alert("Error loading results");
})
Run Code Online (Sandbox Code Playgroud)
这样,我的变量"dbConnection"对于该方法是未知的.
我尝试了其他一些使用<<的方式 - 我读的并不是一个很好的方法.我也尝试使用exists()代替is_null.
我尝试了另一种选择,使用ocpu.rpc调用从我的javascript文件调用我的connect_mongodb方法,并将其作为参数传递给rplot调用中的R方法.
var req = ocpu.rpc("connect_mongodb", {})
Run Code Online (Sandbox Code Playgroud)
由于连接到mongolite不会返回一个JSON对象,这个尝试也失败了以下错误 无法获取http:// localhost:xxxx/ocpu/tmp/x07c82b16bb的 JSON响应/ 遗憾的是,jsonlite的jSON和rjson没有帮助转换db对象为JSON
我正在尝试从opencpu访问安装在用户帐户下的R软件包.当我以该用户身份启动R时,我可以看到该软件包已安装:
> installed.packages()
Package LibPath
RLIM "RLIM" "/limdata/ali/R/x86_64-pc-linux-gnu-library/3.0"
...
> system('whoami');
ali
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试从opencpu访问该库时,我收到错误,指示找不到包:
$ curl -L http://<my.server>/ocpu/user/ali/library/RLIM
there is no package called 'RLIM'
In call:
find.package(pkgname, lib.loc = lib.loc)
# from same server, to confirm opencpu is running...
$ curl -L http://<my.server>/ocpu/library
base
bitops
boot
brew
...
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
平台信息:
我有一个现有的Javascript/HTML应用程序.我想利用R Programming科学计算和图形的力量.
我的目标是,
如何实现这一目标,
我应该连续运行R,使用类似的东西web sockets并连接到R?如果做如何传递R脚本来执行并获取输出包?
有Rserve.有一些nodeJS实现Rserve.但问题是,每行代码都应该通过evaluate命令传递.即使我这样做,如何处理图形输出?
我探索了一些openCPU.如果使用openCPU R软件包,R应该连续运行opencpu库,每个我们启动R和openCPU,它从不同的端口号开始.如果我关闭R会话,opencpu服务器也会终止.
如果我opencpu在我的机器上安装独立服务器,如何使用R?我已经安装了openCPU独立服务器,之后就出现了问题.
我该怎么办,我该怎么做才能完成我的任务.我有点不知道要去哪个方向.请详细说明一下.我相信大多数人都需要这个.
我曾经使用过shiny,但在这种情况下,我无法使用它.需要从外部Web应用程序连接R.
我开发了一个在EC2服务器上运行的ocpu应用程序,但是,特别是当在EC2服务器上运行时,应用程序(即使只有一个用户,我)非常慢,从a t2.micro到a的碰撞c3.large并没有改变最轻微的事情.
为了查看瓶颈在哪里,我在我的代码中引入了计时器,结果如下:
在我的个人电脑上,总时间不到1500毫秒!
结论:R部分本身并不慢,但其他一切都是!
它们是opencpu的任何选项,以便它更快地处理服务器上的数据吗?
自从早期成为RStudio用户以来,我刚刚在我的本地ubuntu VM上安装了RStudio Server.浏览器版本行动迅速,提供用户管理等等 - 这让我印象深刻的原因很多.我也喜欢将它与基于LDAP的用户管理集成的事实似乎并不是一件轻而易举的事.
此外,我一直在关注opencpu.org和Jeroen Ooms的其他项目的开发.像lme4这样的应用程序特别适合我.
我正在为自己的研究所开发一个特定机构的R软件包,并希望通过添加应用程序服务器和添加基于Web的gui来增加其在组织内的使用.
上面描述的两个项目提供的方式比我需要的多,所以不需要重新发明轮子.但我不确定我应该在这里使用哪种轮子.
您将使用哪种体系结构来构建基于Web的GUI,并使用LDAP用户管理(使用外部LDAP服务器)进行自定义程序包?
我想提供一个需要访问大型数据集的Web工具.优选地,该R数据对象应该被加载到存储器中一次,然后可用于用户定义的查询.
openCPU框架是否以任何方式支持持久性数据对象,或者每个查询是否以空白平板开头?
我尝试使用OpenCPU在R中使用t-test,如下所示 -
<script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="//cdn.opencpu.org/opencpu-0.4.js"></script>
Run Code Online (Sandbox Code Playgroud)
和
ocpu.seturl("//public.opencpu.org/ocpu/library/stats/R")
var x = [1,2,3,4,5,6,7,8,9,10];
var y = [7,8,9,10,11,12,13,14,15,16,17,18,19,20];
// call R function: stats::t.test
var req = ocpu.rpc("t.test",{
"x" : x,
"y" : y
}, function(output){
alert("t.test equals: " + output);
});
//optional
req.fail(function(){
alert("R returned an error: " + req.responseText);
});
Run Code Online (Sandbox Code Playgroud)
但我得到了这个错误
我无法理解我哪里出错了
如果您使用 OpenCPU,您会注意到任何人都可以访问您的/ocpu/library/[your_library]/R/目录并查看后端应用程序的所有源代码。你怎么能防止这种情况发生?
我在 openshift 上运行基于 opencpu 的映像,每次 pod 启动时,仅几秒钟后,它就会因错误而崩溃:
command terminated with non-zero exit code: Error executing in Docker Container: 137
Run Code Online (Sandbox Code Playgroud)
事件选项卡仅显示以下三个事件,终端日志也不显示任何内容。
Back-off restarting the failed container
Pod sandbox changed, it will be killed and re-created.
Killing container with id docker://opencpu-test-temp:Need to kill Pod
Run Code Online (Sandbox Code Playgroud)
我真的不知道为什么容器每隔几秒钟就重新启动一次。此映像在本地运行良好。
有没有人给我一个关于如何调试这个问题的线索?