js-call-r
JavaScript call R function with a simple way.
Integrate JaveScript and R.\ JavaScript passes JSON to R script, and get JSON from R script by js-call-r module.
Install
npm install --save js-call-r
Usage
const rscript = require('js-call-r');
// Sync
rscript.callSync(RScript, [Args], [Options]);
// Async, support Promise while callback is undefined
rscript.call(RScript, [Args], [Options]);
rscript.call(Rscript, [Args], [Options], [callback]);
Synchronous
const result = call.callSync('./test/test.R', {
a: 1,
b: 3
});
console.log(result.result);
Asynchronous
call.call('./test/test.R', {
a: 1,
b: 3
})
.then((result) => {
console.log(result.result);
})
.catch(err => {
console.log('err = ', err);
});
Or
call.call('./test/test.R', {
a: 1,
b: 3
}, undefined, (result) => {
console.log(result.result);
});
Options
{
"verboseResult": true/[false]
}
false
is default.
Result
If verboseResult
of Options is true
, call() or callSync() will return the following object.
{
"pid": <number>,
"result": <return from R script>
}
If it is false
, the result will only include <return from R script>
part.
While any error
occurs, the result will be the following object.
{
"pid": <number>,
"error": <error message>
}
R script template
Transcate JSON data between JavaScript and R, so input and output for R scripts have to convert to JSON format.
# json library
library('rjson')
# function to call
sumFunc <- function (num1, num2){
sum(num1, num2)
}
# get arguments of cli
args <- commandArgs(trailingOnly = TRUE)
# arguments to JSON
json <- fromJSON(args)
# call function
ret <- sumFunc(as.numeric(json$a),as.numeric(json$b))
# convert return of function to list
output <- list(result = ret)
# output JSON
print(toJSON(output));
Example
npm test
License
No License