【问题标题】:Run R silently from command line, export results to JSON从命令行静默运行 R,将结果导出为 JSON
【发布时间】:2015-09-05 17:36:25
【问题描述】:

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

下面的 R 代码基本上可以工作。它读取数据,拟合模型,将参数估计转换为 JSON,并将它们打印到标准输出:

#!/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

【问题讨论】:

    标签: json r node.js


    【解决方案1】:

    这些选项只会阻止 R 自己的系统消息打印,它们不会阻止另一个 R 函数进行一些打印。否则,您将停止打印最后一行,并且您不会将 json 转换为标准输出!

    那些消息来自install.packages,所以试试:

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

    声称减少输出量。如果它减少到零,工作就完成了。

    如果没有,那么您可以使用sink 重定向标准输出,或者在capture.output 中运行。

    【讨论】:

    • 啊哈,就是这样!最后一个未成年人,有没有办法抑制领先的“[1] ”,如[1] "{\"value\":[4.04458733165933,...
    • 这是告诉您它的长度为 1 的向量的标签,它来自您在命令行上命名时发生的默认打印。如果您使用cat(json),它将打印没有标签的原始字符串。此外,它不会转义可能是你想要的引号......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2011-08-07
    • 1970-01-01
    相关资源
    最近更新 更多