5

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

好的,所以我这样做了,但是当我readMat("new.mat")在 R 中使用时,它永远被卡住了。我还尝试通过以下方式使用包 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 并称为库存。 mat(第一个文件)。

谢谢你的帮助!

4

2 回答 2

5

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

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

我意识到这是在使用 Matlab 到 R 阅读器,但是拥有通用的通用格式的东西对于再现性比为专有格式获取一堆不同的阅读器更有用。

或者,您可以通过R.matlab这组函数+ R/DCOM 接口(在 Windows 上)传递内存中的对象。

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

于 2011-10-31T16:22:23.587 回答
2

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

于 2011-10-31T16:31:44.073 回答