json - 从命令行静默运行 R,将结果导出为 JSON

标签 json r node.js

如何从 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 进程不会停止打印到标准输出。我尝试过 --quiet --slave --silent 这都有一点帮助,但还不够。以下是发送到标准输出的内容:

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

最佳答案

这些选项仅阻止 R 自己的系统消息打印,它们不会阻止另一个 R 函数进行某些打印。否则你将停止打印最后一行,并且无法将 json 发送到标准输出!

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

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

声称可以减少输出量。如果将其减少到零,工作就完成了。

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

关于json - 从命令行静默运行 R,将结果导出为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30943172/

相关文章:

javascript - JSON jQuery 菜单问题

r - 没有适用于 'mutate_' 的方法应用于类 "c(' 整数', 'numeric' ) 的对象”

r - Knitr 中的 Cairo 字体大小

string - NodeJS 将字符串转换为变量

php - 防止 PHP 警告和错误破坏 json 解析器?

javascript - 通过 flask 将谷歌图表的列表信息正确发送到 JS?

javascript - d3 如何在发布请求中正确传递请求正文?

r - 在 R 中,如何根据名称从命名 num 创建交叉表?

javascript - Neptune DB 不会将属性值更改为以前的值

node.js - Google App Engine - 具有所有语言环境的 Node.js