如何从shell调用R脚本(例如,从Node.js exec)并将结果导出为JSON(例如返回Node.js)?从命令行无声运行R,将结果导出到JSON
下面的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
这些都有所帮助,但还不够。这里是什么发送到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]“{\”value \“:[4.04458733165933,...' – prototype
]那样压制前导”'[1]'“这是标签告诉你它的长度为1 vector,并且它来自当你在命令行命名的时候发生的默认打印,如果你使用'cat(json)'而不是打印没有标签的原始字符串,并且它不会逃避引号无论如何你是想要的 – Spacedman