Initializing help system before first use

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