Nodejs和R交互

来源:互联网 发布:多源异构数据集成 编辑:程序博客网 时间:2024/05/01 09:39

Nodejs和R交互

原文http://blog.csdn.net/tututototo/article/details/51405030

之前从网上找的例子较少,不是加载不了R源文件就是连接IP各种报错,自己对nodejs并不太熟悉,经过调试后终于通了。

1、服务器端Rserve配置

方法一 Rstudio下安装

在工作目录下创建Rserver.R文件

install.packages("Rserve")##安装library(Rserve)##加载Rserve()

方法二 命令行下安装

在window是命令行进入Rserve位置,一般在安装目录.\R-3.2.4\library\Rserve\libs\i386下,注意区别32位和64系统
在命令行输入R CMD RServe即可

木有描述

2、客户端Nodejs配置

在工作目录下加载rio,在命令行输入 npm install rio

npm install rio

3、Nodejs与R的交互

1、R命令模式

在客户端工作目录下创建test1.js文件,代码如下:

var rio = require("rio");rio.enableDebug(true);//开启调试模式rio.evaluate({    command: "rnorm(20)",    host : "xxx.xxx.xxx.xxx"//服务器IP地址    });

关闭调试模式下

这里写图片描述

开启调试模式下

这里写图片描述

2、R文件模式

在服务器端工作目录下创建uniqueSort.R(我的路径为D:/Rserve)

if (!"RJSONIO" %in% names(installed.packages()[,"Package"])){  install.packages("RJSONIO")}library(RJSONIO)uniqueSort <- function(test){  test <- fromJSON(test)  test <- unlist(test$test)  test <- unique(test)  test <- sort(test)  res <- list(test=test)  toJSON(res)}# args <- '{"test":[1,4,4,1,1,0,0,1,1,1,1,0,1,0,2,0,1,1,2,0,0,3,2]}'# res <- uniqueSort(args)# fromJSON(res)$test

在客户端工作目录下创建test2.js文件

var rio = require("rio");var r_path = "D:/Rserve";//服务器端R文件路径var r_file_command =  "source(\'" + r_path + "/uniqueSort.R" +"\')";//R路径及名称var args = {test: [1,4,4,1,1,0,0,1,1,1,1,0,1,0,2,0,1,1,2,0,0,3,2]};function displayResponse(err, res) {    if (!err) {        res = JSON.parse(res);        console.log("result is " + res.test);        //结果为0,1,2,3,4     } else {        console.log("Optimization failed");    }}//rio.enableDebug(true);//开启调试模式rio.evaluate({    command: r_file_command,//加载R源    entrypoint: "uniqueSort",//R中的函数    data: args,//Nodejs传入R的参数    callback: displayResponse,    host : "xxx.xxx.xxx.xxx"//服务器IP    });

运行结果
这里写图片描述

[1].Nodejs与R跨平台通信 http://blog.fens.me/r-rserve-nodejs/
[2].node-rio https://github.com/albertosantini/node-rio

0 0