首页 文章

从命令行静默运行R,将结果导出到JSON

提问于
浏览
1

我如何从shell调用R脚本(例如从Node.js exec)并将结果导出为JSON(例如返回Node.js)?

下面的R代码基本上可行 . 它读取数据,拟合模型,将参数估计值转换为JSON,然后将它们打印到stdout:

#!/usr/bin/Rscript --quiet --slave
install.packages("cut", repos="http://cran.rstudio.com/");
install.packages("Hmisc", repos="http://cran.rstudio.com/");
install.packages("rjson", repos="http://cran.rstudio.com/");
library(rjson)
library(reshape2);

data = read.csv("/data/records.csv", header = TRUE, sep=",");
mylogit <- glm( y ~ x1 + x2 + x3, data=data, family="binomial");
params <- melt(mylogit$coefficients);
json <- toJSON(params);
json

这是我想如何从Node调用它...

var exec = require('child_process').exec;
exec('./model.R', function(err, stdout, stderr) {
   var params = JSON.parse(stdout);  // FAIL! Too much junk in stdout       
});

除了R进程赢了't stop printing to stdout. I'已尝试 --quiet --slave --silent 这些都有所帮助,但还不够 . 这里's what'被发送到stdout:

The downloaded binary packages are in
    /var/folders/tq/frvmq0kx4m1gydw26pcxgm7w0000gn/T//Rtmpyk7GmN/downloaded_packages

The downloaded binary packages are in
    /var/folders/tq/frvmq0kx4m1gydw26pcxgm7w0000gn/T//Rtmpyk7GmN/downloaded_packages
[1] "{\"value\":[4.04458733165933,0.253895751245782,-0.1142272181932,0.153106007464742,-0.00289013062471735,-0.00282580664375527,0.0970325223603164,-0.0906967639834928,0.117150317941983,0.046131890754108,6.48538603593323e-06,6.70646151749708e-06,-0.221173770066275,-0.232262366060079,0.163331098409235]}"

What's the best way to use R scripts on the command line?

按照以下帖子运行 R --silent --slave CMD BATCH model.R 仍会导致大量无关文本打印到 model.Rout

Run R script from command line

1 回答

  • 2

    这些选项仅阻止R自己的系统消息打印,它们不会阻止另一个R功能进行打印 . 否则你将停止你的最后一行打印,你不会让你的json到stdout!

    这些消息来自 install.packages ,请尝试:

    install.packages(-whatever-, quiet=TRUE)
    

    声称减少了产量 . 如果它减少到零,则完成工作 .

    如果没有,那么你可以使用 sink 重定向stdout,或者在 capture.output 内运行 .

相关问题