您的位置:首页 > Web前端 > Node.js

Nodejs和R交互

2016-05-14 11:44 417 查看

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_
4000
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: