R:帮助将特定的 .mat 文件读入 R

Posted

技术标签:

【中文标题】R:帮助将特定的 .mat 文件读入 R【英文标题】:R: Help reading a particular .mat file into R 【发布时间】:2011-12-18 20:38:27 【问题描述】:

所以我一直在尝试将这个特定的 .mat 文件读入 R。我对 matlab 了解不多,但我知道 R.matlab 包只能将未压缩的数据读入 R,并保存它未压缩我需要通过使用将它保存在matlab中 save new.mat -v6

好的,所以我这样做了,但是当我在 R 中使用 readMat("new.mat") 时,它永远无法加载。我还尝试通过以下方式使用包 hdf5:

> hdf5load("new.mat", load=FALSE)->g
Error in hdf5load("new.mat", load = FALSE) : 
  can't handle hdf type 201331051

我不确定这个问题可能是什么,但如果有人想弄清楚这个文件位于http://dibernardo.tigem.it/MANTRA/MANTRA_online/Matlab_Code%26Data.html 并被称为inventory.mat(第一个文件)。

感谢您的帮助!

【问题讨论】:

对 matlab 也不太了解,但最近对它的开放替代品 octave 感到很有趣。如果您不需要定期导入,octave 可能是一个值得一看的快速解决方法。 R.matlab 可以读取压缩数据。当我已经知道正确的比例时,我发现有必要减少一些大文件的缓冲区大小,但接口没有提供。 【参考方案1】:

这个特定的文件有一个对象inventory,它是一个struct 对象,里面有很多不同的东西。有些是元胞数组,有些是双精度或逻辑向量,还有一些是双精度矩阵。看起来 R.matlab 不喜欢结构中的单元格数组,但我不确定是什么导致 R 加载这个问题。出于这样的原因,我通常建议避免将 Matlab 中的结构映射到 R 中的对象。它类似于列表,并且可以将其转换为列表,但这并不总是一个好主意。

我建议为每个对象创建一个新文件,例如ids = inventory.instance_ids 并将每个对象保存到单独的 .mat 文件中,或者将所有对象(清单对象除外)保存到 1 个文件中。更好的是转到文本,例如通过csvwrite,这样您就可以看到正在创建的内容。

我意识到这是围绕使用 Matlab 到 R 阅读器,但拥有通用的通用格式的东西比为专有格式获得一堆不同的阅读器更有用。

或者,您可以通过 R.matlab 或 this set of functions + R/DCOM 接口(在 Windows 上)传递内存中的对象。

虽然这并没有说明如何使用 R.matlab,但我已经在 R 和 Matlab 之间进行了很多双向数据传输,我发现最好避免使用 .mat 文件(并且,类似地, .rdat 文件)。我喜欢在内存中传递对象,这样我就可以在每一侧或通过标准文本文件检查它们。处理特定于应用程序的文件格式,尤其是那些变化很大且效率低下的文件格式(我在看你的 MathWorks),并不是很好地利用时间。我很欣赏那些在阅读器上工作的人,但是对目标语言中使用的数据结构进行更多控制是非常值得使用简单输出文件格式的空间开销的。内存数据传输非常好,因为您可以连接程序,但如果您的唯一目标是移动数据,这可能会分散注意力。

【讨论】:

同意以文本格式写入是个好主意。这样,当出现问题时,您可以检查文件的内容。将 -ascii 传递给 MATLAB 的 save 函数将是一个好的开始。【参考方案2】:

您是否运行过第 22 至 24 页http://cran.r-project.org/web/packages/R.matlab/R.matlab.pdf 中的示例?这将测试您从版本 4 和 5 读取的能力。我不确定 R 是否无法读取压缩文件。 Omegahat 中有一个 Rcompresssion 包。

【讨论】:

以上是关于R:帮助将特定的 .mat 文件读入 R的主要内容,如果未能解决你的问题,请参考以下文章

如何按行条件将巨大的 csv 文件读入 R?

在 R 中使用 foreach 循环读取 MATLAB .mat 文件时出现问题

读入满足 R 中特定要求的表

R语言中怎样将数据框转换成矩阵?

将特定行的csv读入php

vector<Mat> opencv 问题