[R] Moving data between R and Matlab back and forth?
Tribo Laboy
tribolaboy at gmail.com
Thu Mar 27 03:41:09 CET 2008
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:
#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
>
More information about the R-help
mailing list