所以我一直在尝试将这个特殊的.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(第一个文件)。
感谢您的帮助!
答案 0 :(得分:4)
这个特定的文件有一个对象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),并不能很好地利用时间。我很欣赏那些从事读者工作的人,但是对目标语言中使用的数据结构有更多的控制权,这非常值得使用简单的输出文件格式。内存中的数据传输是非常好的,因为你可以接口程序,但如果你唯一的目标是移动数据,这可能会分散注意力。
答案 1 :(得分:2)
您是否在第22至24页的http://cran.r-project.org/web/packages/R.matlab/R.matlab.pdf中运行了示例?这将测试您从版本4和5读取的能力。我不确定R无法读取压缩文件。 Omegahat有一个Rcompresssion包。