R: 如何将一个特定的.mat文件读入R中?

5

我一直在尝试将这个.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可能是一个值得一试的快速解决方案。 - Matt Bannert
R.matlab可以读取压缩数据。我发现当我已经知道正确的比率时,有必要减小一些大文件的缓冲区大小,但接口没有提供。 - mdsumner
2个回答

5
这个特定的文件有一个对象,inventory,它是一个struct对象,里面有很多不同的东西。有些是单元数组,其他的是双精度或逻辑向量,还有几个是双精度矩阵。看起来R.matlab不喜欢在结构体中使用单元数组,但我不确定什么原因导致了R无法加载它。出于这样的原因,我通常建议避免在Matlab中将结构体映射到R中的对象。它类似于列表,这个可以转换为列表,但并不总是一个好主意。
我建议创建一个新文件,每个对象一个文件,例如ids = inventory.instance_ids,并将每个对象保存到单独的.mat文件中,或者将它们全部保存到一个文件中,除了inventory对象。更好的方法是通过csvwrite等方式转换为文本,这样您可以看到正在创建的内容。
我知道这绕过了Matlab到R读取器的使用,但是将事物放在一个通用的格式中比获取一堆专有格式的读取器更有用,可重现性更高。
或者,您可以通过R.matlab在内存中传递对象,或者通过这组函数 + R/DCOM接口(在Windows上)。
虽然这不解决如何使用R.matlab的问题,但我已经在R和Matlab之间转移数据很多次,双向都是如此。我发现最好避免使用.mat文件(类似地,.rdat文件)。我喜欢通过内存传递对象,这样我可以在每一侧检查它们,或者通过标准文本文件。处理应用程序特定的文件格式,特别是那些变化很大且效率低下的文件格式(我在看你MathWorks),并不是一个好的时间利用方式。我感谢那些致力于读取器的人,但是对目标语言中使用的数据结构有更多控制权非常值得使用简单的输出文件格式的空间开销。内存中的数据传输非常好,因为您可以与程序进行接口交互,但如果您的唯一目标是移动数据,则可能会分散注意力。

同意以文本格式进行写入是一个好主意。这样,在出现问题时,您可以检查文件的内容。向MATLAB的save函数传递-ascii参数是一个不错的开端。 - Richie Cotton

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接