我面临以下问题。我尝试使用R中的readMat函数导入字符串单元格。
Matlab代码:
Names = {'A', 'B', 'C', 'D'};
save('RDataIn.mat', 'Names');
现在我想使用R中的字符串集。我运行到以下R脚本
R代码:
library('R.matlab')
Names <- readMat("RDataIn.mat")
readMat显然不能处理单元格类型.mat数据,它会创建一些奇怪的列表。有人解决这个问题吗?感谢。
答案 0 :(得分:0)
> 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"