Example
The following example shows how to execute R statements and exchange data with the R workspace.
model "r example"
uses "r"
declarations
CITIES = {"LONDON", "PARIS", "ROME"}
ZONES = 1..4
mosarray, backarr, backarrio: array(ZONES, CITIES) of integer
backnum: real
end-declarations
setparam("Rverbose",true) ! Enable showing R error messages
! Reval evaluates arbitrary R statements
Reval("t<-Sys.time();now<-format(t, '%H:%M')")
! Rprint also prints the result (via the R print function)
Rprint("paste('Hello from R at',now)")
! Assign some Mosel scalars to R vars and show results
Rset("a_num", 1.2)
Reval("str(a_num)")
Rset("a_chr", "word")
Reval("str(a_chr)")
! The lvalue can be any R valid lvalue, e.g. the dim attribute
Rset("a_vec", 1..6) ! a_vec is an R vector
Rset("dim(a_vec)", [2,3]) ! change its dimensions
writeln("a_vec")
Rprint("a_vec") ! now it is a 2x3 matrix
! Assign a Mosel array to an R variable
forall(i in ZONES, c in CITIES) mosarray(i,c):=i*10+getsize(c)
Rset("arr", mos_array)
! The R vector keeps index names
writeln("arr")
Rprint("arr")
! Retrieve R variables
writeln("a_num is ", Rgetreal("a_num"))
writeln("a_chr is ", Rgetstr("a_chr"))
Rgetarr("arr", backarr)
writeln("arr is ", backarr)
! Data can also be exchanged via the I/O driver
newnumber:=1.3
mosarray(1,"LONDON"):=1
! Send data to R
initializations to "r.rws:"
newnumber as "a_num"
mosarray as "arr"
end-initializations
! Get data back from R
initializations from "r.rws:"
backnum as "a_num"
backarrio as "arr"
end-initializations
writeln("backnum is ", backnum)
writeln("backarrio is ", backarrio)
end-model
