是否有相当于R的dput()用于Matlab?

时间:2011-12-04 18:28:54

标签: r matlab matrix

Matlab有相当于R的dput()吗?

dput()将R对象的ASCII文本表示写入文件或连接。

3 个答案:

答案 0 :(得分:10)

UPDATE 1 :为细胞添加了递归和支持!

更新2 :添加了对结构的支持!

更新3 :添加了对逻辑,整数,复杂双精神的支持。添加了单元测试。发布到FileExchange:http://www.mathworks.com/matlabcentral/fileexchange/34076

注意:检查https://github.com/johncolby/dput处的github以获取所有进一步的更新。


没有内置的等价物,但创建一个的模板很简单,所以我想我会开始制作它。只需循环遍历变量并根据数据类型编写等效字符串。

我为此启动了一个git存储库,因此请随意分叉并帮助我使用不同的数据类型。当基本类型完成时,我会在FileExchange上发布它(至少是double,char,struct,cell)。

https://github.com/johncolby/dput

从一些示例变量开始

x = 1:10;
y = 3;
z = magic(3);
mystr = ['line1'; 'line2'];
mystruct = mystruct = struct('index', num2cell(1:3), 'color', {'red', 'blue', 'green'}, 'misc', {'string' 4 num2cell(magic(3))})
mycell = {1:3, 'test'; [], 1};

基本用法是:

>> dput(x, y, z, mystr, mystruct, mycell)

ans =

x        = reshape([1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000 ],[1  10])                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ;
y        = reshape([3.000000 ],[1  1])                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ;
z        = reshape([8.000000 3.000000 4.000000 1.000000 5.000000 9.000000 6.000000 7.000000 2.000000 ],[3  3])                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ;
mystr    = reshape('lliinnee12',[2  5])                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ;
mystruct = struct('index',reshape({reshape([1.000000 ],[1  1]) reshape([2.000000 ],[1  1]) reshape([3.000000 ],[1  1]) },[1  3]),'color',reshape({reshape('red',[1  3]) reshape('blue',[1  4]) reshape('green',[1  5]) },[1  3]),'misc',reshape({reshape('string',[1  6]) reshape([4.000000 ],[1  1]) reshape({reshape([8.000000 ],[1  1]) reshape([3.000000 ],[1  1]) reshape([4.000000 ],[1  1]) reshape([1.000000 ],[1  1]) reshape([5.000000 ],[1  1]) reshape([9.000000 ],[1  1]) reshape([6.000000 ],[1  1]) reshape([7.000000 ],[1  1]) reshape([2.000000 ],[1  1]) },[3  3]) },[1  3]));
mycell   = reshape({reshape([1.000000 2.000000 3.000000 ],[1  3]) reshape([ ],[0  0]) reshape('test',[1  4]) reshape([1.000000 ],[1  1]) },[2  2])                                                                                                                                                                                                                                                                                                                                                                                                                                             ;

然后您可以在线粘贴文本以制作可重现的示例,其他人可以复制/粘贴回MATLAB以重新生成变量。就像R!

答案 1 :(得分:4)

这个问题显然假定了Matlab的安装工作。如果你想使用Matlab对象中的数据在R中构造示例,那么" R.matlab"中显然有readMat。包。您可以使用R从Matlab文件(或使用服务器连接)中提取数据,然后使用dputdump

在Matlab中,至少根据我对文档的阅读,我看到的选项(它可能只适用于Matlab矩阵)是

filename='asc.txt'
save(filename, 'mat', '-ascii')
type asc.txt

还有一个选项(虽然不是真正的ASCII精神)使用通用数据格式,其中有Matlab写和R读功能。

答案 2 :(得分:0)

>> dput(x, y, z, mystr, mystruct, mycell)

ans =

x        = reshape([1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000 ],[1  10])                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ;
y        = reshape([3.000000 ],[1  1])                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ;
z        = reshape([8.000000 3.000000 4.000000 1.000000 5.000000 9.000000 6.000000 7.000000 2.000000 ],[3  3])                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ;
mystr    = reshape('lliinnee12',[2  5])                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ;
mystruct = struct('index',reshape({reshape([1.000000 ],[1  1]) reshape([2.000000 ],[1  1]) reshape([3.000000 ],[1  1]) },[1  3]),'color',reshape({reshape('red',[1  3]) reshape('blue',[1  4]) reshape('green',[1  5]) },[1  3]),'misc',reshape({reshape('string',[1  6]) reshape([4.000000 ],[1  1]) reshape({reshape([8.000000 ],[1  1]) reshape([3.000000 ],[1  1]) reshape([4.000000 ],[1  1]) reshape([1.000000 ],[1  1]) reshape([5.000000 ],[1  1]) reshape([9.000000 ],[1  1]) reshape([6.000000 ],[1  1]) reshape([7.000000 ],[1  1]) reshape([2.000000 ],[1  1]) },[3  3]) },[1  3]));
mycell   = reshape({reshape([1.000000 2.000000 3.000000 ],[1  3]) reshape([ ],[0  0]) reshape('test',[1  4]) reshape([1.000000 ],[1  1]) },[2  2])                                                                                                                                                                                                                                                                                                                                                                                                                                             ;

然后,您可以仅在线粘贴文本以创建可重现的示例,其他人可以将其复制/粘贴回MATLAB中以重新生成变量。