Interfaces/R/Rserve/Extensions
Rserve | Installation | Methods | Formats | Examples | Quirks | Extensions
(This page is preliminary and comments are solicited.)
Locales
In general, verbs to call specific R commands should be created in locales named "R" followed by the corresponding R library name, for example, Rsplines for the R splines library. These locales should extend the rbase locale.
Names
Verb names should match the corresponding R function name, or near equivalent. Dots in R names should be replaced with an underscore.
Arguments
R functions often have many optional arguments, though not all of these need be supported by the J verb. Here are two ways that the argument list might be handled:
- the argument is a specific list of values that must be given in order
- the argument is a package (table of name;value pairs) that needs only non-default values. In this case, the default values must be previously defined in the verb.
For example, the bs function in the R splines library generates the B-spline basis matrix for a polynomial spline. The R usage is:
bs(x, df = NULL, knots = NULL, degree = 3, intercept = FALSE, Boundary.knots = range(x)) Arguments x the predictor variable. Missing values are allowed. df degrees of freedom... knots the internal breakpoints that define the spline... degree degree of the piecewise polynomial, default 3 intercept if TRUE, an intercept is included in the basis; default is FALSE. ...
Corresponding J definitions might be:
NB. bs1 argument is x and df only: bs1=: 3 : 0 'x df' rdset y ... ) NB. bs2 argument is a package, which must have at least name x: bs2=: 3 : 0 df=. 3 degree=. 3 intercept=. 0 ({."1 y)=. {:"1 y ... )
Calling R
A sequence of calls is needed to configure the R environment, and define the required variables. These calls should be wrapped in a try./catcht. block:
bs1=: 3 : 0 try. rdcmd 'library(splines)' 'x df' rdset y res=. rdcmdr 'bs(x,df) catcht. wdinfo 'Splines Library';throwtext_rserve_ res=. _1 end. res )
Complete Example
The following script creates the Rsplines locale and defines bs1 and bs2 verbs as above:
NB. example of R extension coclass 'Rsplines' coinsert 'rbase' NB. bs1 - generate the B-spline basis matrix for a polynomial spline. NB. argument is numeric list and degrees of freedom NB. returns the matrix bs1=: 3 : 0 try. rdcmd 'library(splines)' 'x df' rdset y res=. rdget 'bs(x,df=df)' catcht. wdinfo 'Splines Library';throwtext_rserve_ res=. _1 end. 'data' rgetmap res ) NB. bs2 - generate the B-spline basis matrix for a polynomial spline. NB. argument is package, where NB. value x must be given NB. values df, degree and intercept are optional bs2=: 3 : 0 df=. 3 degree=. 3 intercept=. 0 ({."1 y)=. {:"1 y arg=. x;df;degree;intercept try. rdcmd 'library(splines)' 'x df deg int' rdset arg res=. rdget 'bs(x,df=df,degree=deg,intercept=int)' catcht. wdinfo 'Splines Library';throwtext_rserve_ res=. _1 end. 'data' rgetmap res )
Examples of calling these verbs:
1. Argment is a pair: values;degrees of freedom:
bs1_Rsplines_ (p: i.7);3
2. Argument is a package of non-default values:
x=. p: i. 7 degree=. 4 intercept=. 1 bs2_Rsplines_ pack 'x degree intercept'