# R and Octave/Matlab notes

As the Debian r-base package states: “S is the statistician’s Matlab and R is to S what Octave is to Matlab”. These notes document translations between R and Octave, and sometimes Matlab. (I do not have S and do not have access to Matlab all the time.)

## Notes elsewhere

See the much more comprehensive notes on CRAN and on mathesaurus. This page just has a couple of things I have noted after working them out.

## Data transfer

R uses the nice platform-independent XDR binary format for saving its workspace. I'm sure one could read this into Octave with a bit of effort. However, is probably easier to use HDF5, which is not the native format of either R and Octave, but is supported out of the box by both. In R do:

library(hdf5) hdf5save("filename.hdf","var1","var2","var3",...)

Then in octave

load "filename.hdf"

works for simple data types, including matrices. Matlab should work too (it
has a function called `hdf5read`), but I haven’t tried.

## Sourcing a script file

In Octave/Matlab typing the name of a `.m`-file runs the commands as
if typed into the current workspace. This has the same effect as
`source("filename.r",local=T,print.eval=T)` in R.

## Timing

### Wall clock time

Octave tic; ...; time_taken=toc R times=system.time((...)) time_taken=times[3]

### CPU time

Octave start_time=cputime(); ...; cpu_time_taken=cputime()-start_time R times=system.time((...)) cpu_time_taken=sum(times[-3])

To record start and stop times in R, call `proc.time` before and after
the code. The difference between these vectors is what `system.time`
returns.

The performance of R and Octave should be in the same ball-park for many things, although I have not done a careful comparison.