Nodejs和R交互

本文详细介绍了如何在Nodejs中与R进行交互,包括服务器端Rserve的配置,如通过Rstudio或命令行安装,客户端Nodejs的配置,以及两种交互模式:R命令模式和R文件模式。通过示例代码展示了如何在Nodejs中调用R命令和执行R脚本,实现数据处理和分析的跨平台通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nodejs和R交互

原文http://blog.youkuaiyun.com/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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值