通过R导入的Matlab单元阵列失败

时间:2015-03-28 13:51:10

标签: r matlab

我面临以下问题。我尝试使用R中的readMat函数导入字符串单元格。

Matlab代码:

Names = {'A', 'B', 'C', 'D'};
save('RDataIn.mat', 'Names');

现在我想使用R中的字符串集。我运行到以下R脚本

R代码:

library('R.matlab')
Names <- readMat("RDataIn.mat")

readMat显然不能处理单元格类型.mat数据,它会创建一些奇怪的列表。有人解决这个问题吗?感谢。

1 个答案:

答案 0 :(得分:0)

是的......这很奇怪。我不会说它“失败”,但它的格式需要一些工作。这是我保存上面的单元格数组并将其加载到R:

时得到的结果
> library("R.matlab")
> Names <- readMat("RDataIn.mat")
> Names
$Names
$Names[[1]]
$Names[[1]][[1]]
     [,1]
[1,] "A" 


$Names[[2]]
$Names[[2]][[1]]
     [,1]
[1,] "B" 


$Names[[3]]
$Names[[3]][[1]]
     [,1]
[1,] "C" 


$Names[[4]]
$Names[[4]][[1]]
     [,1]
[1,] "D" 



attr(,"header")
attr(,"header")$description
[1] "MATLAB 5.0 MAT-file, Platform: MACI64, Created on: Sat Mar 28 13:12:31 2015                                         "

attr(,"header")$version
[1] "5"

attr(,"header")$endian
[1] "little"

如您所见,Names包含一个嵌套列表,其中每个字符串都存储在1 x 1矩阵中。您可以做的是访问此列表的唯一元素,然后在此列表中,遍历所有元素并提取每个嵌套元素的第一个元素。这包含您要查找的每个“名称”或字符串。您可以使用标准sapply调用,对于列表中的每个元素,应用自定义函数,为您提取每个嵌套元素的第一个元素。

x <- sapply(Names[[1]], function(n) n[[1]])

x将成为名字的载体,我得到:

> x
[1] "A" "B" "C" "D"

您可以通过标准矢量索引访问每个“名称”:

> x[1]
[1] "A"

> x[2]
[1] "B"

> x[3]
[1] "C"

> x[4]
[1] "D"