[R] Moving data between R and Matlab back and forth?

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu Mar 27 08:08:40 CET 2008


On Thu, 27 Mar 2008, Tribo Laboy wrote:

> I realized that not everyone has Matlab and that basically the issue
> is purely how to deal with the returned data in R, so I have revised
> my example code and made it easier to copy-paste and run:

Only for those with matlab!  The rest of us have little clue what the 
format of the output is -- it looks like a list array, which is not what 
the help page for readMat says it is.

I would try

as.data.frame(drop(labpcimport))


> #Make a data frame in R
>
> Maker <- factor(c("HP", "HP", "Sony", "DELL", "whitebox", "whitebox"))
> CPUspeed <- c(2,4,2.5,2.5,2,5)
> HDD <- c(80, 250, 100, 100, 80, 300)
> RAM <- c(2, 2, 1, 2, 2, 4)
> labpc <- data.frame(Maker, CPUspeed, HDD, RAM)
> labpc
>
> #Save in Matlab v6 format with 'writeMat'
>
> library(R.matlab)
> writeMat("labpc.mat", labpcexport = labpc)
>
> #Load the file in R with 'readMat'
>
> labpcfile <- readMat("labpc.mat")
> labpcimport <- labpcfile$labpcexport
> labpcimport
>
> # This is the last line output
> #, , 1
> #
> #         [,1]
> #Maker    List,6
> #CPUspeed Numeric,6
> #HDD      Numeric,6
> #RAM      Numeric,6
>
> Now, how do I convert the result held in labpcimport back to a data frame?
>
> Thanks in advance,
>
> TL
>
> On Thu, Mar 27, 2008 at 1:27 AM, Tribo Laboy <tribolaboy at gmail.com> wrote:
>> Hi to the list,
>>
>>  I am trying to find a way to painlessly move structured data back and
>>  forth between R and Matlab (also Octave). For this purpose I found the
>>  R.matlab package great help. I wish to use a Matlab -v6 MAT file as an
>>  intermediary format, because it is well read by both Matlab and
>>  Octave. It is also well read by 'readMat' function in R.matlab
>>  package, but that is where I run into problems because of poor
>>  knowledge of R.
>>
>>  By structured data I mean data in data frames in R and the closest
>>  equivalent - structures in Matlab. Here is what I have done.
>>
>>  -----------------------------------------------------
>>  Make a data frame in R and export it
>>  -----------------------------------------------------
>>
>> > Maker <- factor(c("HP", "HP", "Sony", "DELL", "whitebox", "whitebox"))
>> > CPUspeed <- c(2,4,2.5,2.5,2,5)
>> > HDD <- c(80, 250, 100, 100, 80, 300)
>> > RAM <- c(2, 2, 1, 2, 2, 4)
>> > labpc <- data.frame(Maker, CPUspeed, HDD, RAM)
>>
>> > labpc
>>      Maker CPUspeed HDD RAM
>>  1       HP      2.0  80   2
>>  2       HP      4.0 250   2
>>  3     Sony      2.5 100   1
>>  4     DELL      2.5 100   2
>>  5 whitebox      2.0  80   2
>>  6 whitebox      5.0 300   4
>>
>> > library(R.matlab)
>> > writeMat("labpc.mat", labpcdata = labpc)
>>  --------------------------------------------------------------
>>
>>  --------------------------------------------------------------
>>  In MATLAB - everything is as expected
>>  --------------------------------------------------------------
>>  load('labpc.mat')
>>
>> >> labpcdata
>>
>>  labpcdata =
>>
>>        Maker: {6x1 cell}
>>     CPUspeed: [6x1 double]
>>          HDD: [6x1 double]
>>          RAM: [6x1 double]
>>
>> >> class(labpcdata)
>>
>>  ans =
>>
>>  struct
>>
>> >> labpcstruct = labpcdata
>> >> save('labpcstruct.mat', 'labpcstruct')
>>  ---------------------------------------------------------
>>
>>
>>  -------------------------------------------------------
>>  Back in R - how to rebuild the data frame from the list labpcstruct?
>>  -------------------------------------------------------
>> > labpcfile <- readMat("labpcstruct.mat")
>> > labpcfile
>>  $labpcstruct
>>  , , 1
>>
>>          [,1]
>>  Maker    List,6
>>  CPUspeed Numeric,6
>>  HDD      Numeric,6
>>  RAM      Numeric,6
>>
>>
>>  attr(,"header")
>>  attr(,"header")$description
>>  [1] "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Wed Mar 26
>>  15:49:21 2008                                                  "
>>
>>  attr(,"header")$version
>>  [1] "5"
>>
>>  attr(,"header")$endian
>>  [1] "little"
>>
>> > labpcstruct <- labpcfile$labpcstruct
>> > labpcstruct
>>  , , 1
>>
>>          [,1]
>>  Maker    List,6
>>  CPUspeed Numeric,6
>>  HDD      Numeric,6
>>  RAM      Numeric,6
>>
>>
>> > typeof(labpcstruct)
>>  [1] "list"
>>
>>  --------------------------------------------
>>
>>  So if there is any kind soul that will tell me how to get back the
>>  original data frame from the imported list 'labpcstruct', that would
>>  be great.
>>
>>  Regards,
>>
>>  TL
>>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



More information about the R-help mailing list