2010-11-30 77 views
3

那么我有一个矩阵在Matlab中,有4个维度。我想导出这个矩阵在R中使用它(我想用它来绘制)。对我来说问题是我不知道如何导出一个可以被R使用的矩阵,而且我也不知道如何在R中导入数据。基本上,我试图做的是将我的矩阵在Matlab中使用dlmwrite,并使用read.table()将其导入到R中。不幸的是,这是行不通的。如何在R中使用Matlab数据?

+9

你看过`R.matlab`包吗? http://cran.r-project.org/web/packages/R.matlab/index.html – mropa 2010-11-30 15:19:01

+1

什么格式可以从Matlab中导出数组。如果你可以包含这类文件的例子,我相信R社区在SO上的共同努力可以找到一种方法将它读入R数组中。 – 2010-11-30 16:14:49

回答

3

你可以用fwrite写出任何二进制数组,然后用readBin将它读入到R中。在R中,将给出一个向量,您可以使用array()或matrix()来推入形状。

下面是一个非常简单的例子。

a = magic(4) 

con = fopen('a.bin', 'w'); 
fwrite(con, a * 0.01, 'float64') 
fclose(con) 

a * 0.01 

ANS =

0.1600 0.0200 0.0300 0.1300

0.0500 0.1100 0.1000 0.0800

0.0900 0.0700 0.0600 0.1200

0.0400 0.1400 0.1500 0.0100

现在,在R:

matrix(readBin("a.bin", "double", 16), 4) 

[1] [2] [3] [,4]

[1,] 0.16 0.02 0.03 0.13

[2,] 0.05 0.11 0.10 0.08

[3,] 0.09 0.07 0.06 0.12

[4,] 0.04 0.14 0.15 0.01

你可以取代的 “a” 与一个四维阵列,并且将R代码改变此,并且它应该工作一样好:

## assume 4 dimensions with particular sizes 
dims <- c(10, 5, 2, 3) 
a <- array(readBin("a.bin", "double", prod(dims)), dims) 

最后,注意,这个假设在Matlab和R.见machineformat相同的字节顺序在Matlab fwrite的帮助,如果你的最终系统是不同的。