【问题标题】:Matlab Cell Array Import via R fails通过 R 导入 Matlab 元胞数组失败
【发布时间】:2015-03-28 13:51:09
【问题描述】:

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

Matlab 代码:

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

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

R 代码:

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

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

【问题讨论】:

    标签: r matlab


    【解决方案1】:

    是的....那样很奇怪。我不会说它“失败”,但它的格式需要一些工作。这是我保存上述单元格数组并将其加载到 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"
    

    【讨论】:

    • 非常感谢您的工作。我的意思是它在实际 matlab 结构的意义上没有解析字符串单元数组的意义上是失败的。我认为可以说名称向量是 R 中的等效表示。我将在 GitHub r.matlab 上提出一个问题,也许将来值得改进
    • 啊,我明白了。明白了。好吧,如果我的回答对您有帮助,请考虑接受我的回答。谢谢,祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 2014-06-22
    相关资源
    最近更新 更多