如何使用来自节点js的rserve-js动态地将参数发送到R中的Rserve?

时间:2017-02-10 12:19:33

标签: r node.js rserve

var express = require('express');
var router = express.Router();
var session = require('express-session');

let Rserve = require("rserve-js");


var disease="fever";
    var dataz="cough";
enter code here
let client = Rserve.connect("localhost", 6311, function() {
console.log("Connected to Rserve.");

client.eval("datas<-read.csv('~/Desktop/data.csv')", function(err, response) {
    if (err) {
        throw err;
    }
    console.log("table is loaded.");

    client.eval("data<-datas[,c(2,3)]", function(err, response) {
        if (err) {
            throw err;
        }


    });

    client.eval("print(data)", function(err, response) {
        if (err) {
            throw err;
        }


    });


    // client.assign("x", disease);
    // client.assign("y", dataz);

    // client.eval("print(x)");

    client.eval("result<-subset(data,Sym1=='fever' | Sym1=='sweating')", function(err, response) {
        if (err) {
            throw err;
        }


    });
    client.eval("da<-summary(result)", function(err, response) {
        if (err) {
            throw err;
        }

    });
     client.eval("print(da)", function(err, response) {
        if (err) {
            throw err;
        }

        //console.log(response.value); // shows dimension of iris table
    });
      var result= client.eval("summary(result)", function(err, response) {
        if (err) {
            throw err;
        }

        //console.log(response); // shows dimension of iris table
    });
       console.log(result);
});
});


module.exports = router;

我发送

Sym1=='fever' 
Sym1=='sweating'

作为评估的静态数据,但我希望它是动态的,以便每次Sym1可以不同,有没有办法分配变量?

1 个答案:

答案 0 :(得分:0)

它不是很整洁,但你总是可以在js中构建子集表达式,如下所示:

var symptoms = ['sweating', 'fever'];
var subsetExpr = symptoms
  .map(function(symptom){ return 'Sym1==' + symptom; })
  .join(' | ');
client.eval("result<-subset(data,"+ subsetExpr +")"