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

我怎么可以从shell(例如从Node.js exec)调用R脚本并将结果导出为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 

这是我想如何从节点调用它…

 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进程不会停止打印到标准输出。 我已经尝试过 – 很--quiet --slave --silent--quiet --slave --silent这些都有一点帮助,但还不够。 以下是发送到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]}" 

在命令行上使用R脚本的最佳方法是什么?

运行R --silent --slave CMD BATCH model.R每个post下面仍然会导致很多无关的文本打印到model.Rout

从命令行运行R脚本

这些选项只能阻止R打印的系统消息,它们不会停止另一个Rfunction进行打印。 否则,你会停止打印最后一行,你不会得到你的JSON标准输出!

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

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

其中声称减less产量。 如果它减less到零,工作完成。

如果没有,那么你可以redirectstdout接收sink ,或运行capture.output内的东西。