# r-script

> A simple little module for passing data from NodeJS to R (and back again).

Latest version **0.0.4** (published 2019-08-29) · MIT license · 0 weekly downloads

## Install

```sh
npm install r-script
pnpm add r-script
yarn add r-script
bun add r-script
```

## Health

**Score 18/100 (F)** — status: abandoned.

Positive: has types package; no vulnerabilities.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.4 |
| Published | 2019-08-29 |
| First published | 2015-12-24 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | separate (@types/r-script) |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 18.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 161 |
| Author | Josh Katz |
| Maintainers | joshkatz |
| Keywords | R, rstats, statistics |

## Links

- npm: https://www.npmjs.com/package/r-script
- Repository: https://github.com/joshkatz/r-script
- Homepage: http://github.com/joshkatz/r-script
- Issues: http://github.com/joshkatz/r-script/issues
- npm.io page: https://npm.io/package/r-script

## Dependencies (1)

- [underscore](https://npm.io/package/underscore.md) ^1.8.3

## Alternatives

- [mobx-react](https://npm.io/package/mobx-react.md) — 2.8M weekly downloads
- [rc-tree](https://npm.io/package/rc-tree.md) — 2.6M weekly downloads
- [@react-oauth/google](https://npm.io/package/@react-oauth/google.md) — 1.3M weekly downloads
- [@wagmi/connectors](https://npm.io/package/@wagmi/connectors.md) — 877.0K weekly downloads
- [vee-validate](https://npm.io/package/vee-validate.md) — 836.4K weekly downloads

## Recent versions

- 0.0.4 (latest) — 2019-08-29
- 0.0.3 — 2016-03-24
- 0.0.2 — 2016-03-24
- 0.0.1 — 2015-12-24

## README

# r-script

A simple little module for passing data from NodeJS to R (and back again).

Data passed from node is converted into a list and loaded into the R environment as the variable `input`. No special syntax in R is needed. For better portability/reliability, it's recommended to load packages with [`needs`](https://github.com/joshkatz/needs) (comes packaged inside the module — no installation required).

### Installation
```
npm install r-script
```

### Example

```js
var R = require("r-script");
```

##### Synchronous
```javascript
// example.js

var out = R("ex-sync.R")
  .data("hello world", 20)
  .callSync();
  
console.log(out);

// [ 'oedorlwlh l', 'oldlrhelwo ', 'erllol dhow', ' lwrellodoh', 'holdlerw ol',
//   'lrlewdhol o', 'lll wohdeor', 'hwrlledl oo', 'elrooh lwld', 'ewrlo lhdlo',
//   'hlloroelwd', 'h eodollwlr', 'wr ldleohlo', 'or ohldlwel', 'lohe lowlrd',
//   'rhdwoelllo ', 'owhorldell ', 'rlle ohdolw', 'rhlwolle od', 'woro helldl' ]
```

```r
# ex-sync.R
needs(magrittr)
set.seed(512)
do.call(rep, input) %>% 
  strsplit(NULL) %>% 
  sapply(sample) %>% 
  apply(2, paste, collapse = "")
```


##### Asynchronous

```javascript
// example.js

var attitude = JSON.parse(
  require("fs").readFileSync("example/attitude.json", "utf8"));

R("example/ex-async.R")
  .data({df: attitude, nGroups: 3, fxn: "mean" })
  .call(function(err, d) {
    if (err) throw err;
    console.log(d);
  });
  
// [ { group: '(40,55]', rating: 46.7143, advance: 41.1429 },
//   { group: '(55,70]', rating: 64.6154, advance: 41.9231 },
//   { group: '(70,85]', rating: 77.2, advance: 45.5 } ]
```

```r
# ex-async.R
needs(dplyr)
attach(input[[1]])

return("early returns are ignored")
cat("so are undirected calls to cat")
print("or print")
cat("unless directed to a file", file = "out.Rout")

# output of final expression is returned to node
df %>% 
  mutate(group = cut(rating, nGroups, ordered = T)) %>% 
  group_by(group) %>% 
  summarize_each(funs_(fxn)) %>%
  select(group, rating, advance) %>%
  mutate(group = as.character(group))
```

### Syntax

**R**(_path_)

Creates a new object that will source the R script specified by _path_.

R.**data**(...)

Adds data to the object and returns itself. You can give any number of arguments of different types. 

R.**call**([_options_], _callback_)

Calls R. Any previously supplied _data_ is stringified into JSON and passed to R, where it's converted into a list and loaded into the R environment as the variable `input`. On completion, the _callback_ is invoked with two arguments: any error and the output from R, parsed back into a Javascript object.

Additional arguments for the conversion from R to JSON can be specified as _options_ (see documentation for [```toJSON```](https://github.com/jeroenooms/jsonlite/blob/master/R/toJSON.R) from the R package `jsonlite` for defaults).

R.**callSync**([_options_])

The same as above, but calls R synchronously.

---
_Source: https://npm.io/package/r-script · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
