2011-12-04 25 views
9

MatlabのRのdput()に相当するものはありますか?MatlabのRのdput()に相当するものはありますか?

dput()は、RオブジェクトのASCIIテキスト表現をファイルまたは接続に書き込みます。

+0

バイナリ表現も書いていますか? – Beginner

+0

いいえ - Rのdput()と同じ容易性を持つ構造化されたデータを電子メールまたは投稿する簡単な方法を探しています –

+0

@QuantGuy下の私の答えを見てください。あなたが必要とする他のデータタイプを教えてください。次にそれらを追加しようとします。ちなみに素晴らしいアイデアです! –

答えて

10

更新1:セルの再帰とサポートが追加されました!

更新日2:構造のサポートが追加されました!

UPDATE 3:論理、整数、複素数のサポートが追加されました。単位テストを追加しました。 http://www.mathworks.com/matlabcentral/fileexchange/34076

:でFileExchangeに投稿されたすべての更なる更新についてhttps://github.com/johncolby/dputでgithubのを確認してください。


同等の機能はありませんが、作成するテンプレートは十分に単純なので、作成すると思います。変数の上をループして、データのタイプに応じて同等の文字列を書き込みます。

私はこのためにgitリポジトリを開始しましたので、自由にフォークして、さまざまなデータ型で私を助けてください。基本的な型が完了したら(double、char、struct、cell少なくとも)FileExchangeに投稿します。いくつかの例の変数

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}; 

基本的な使い方から始め

https://github.com/johncolby/dput

です:

>> 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

素晴らしい。ところで、github経由で一般コミュニティに大きな貢献をしてくれてありがとう! –

+0

dputスタイルのものを手に入れようとするとエラーが出る:http://pastebin.com/Atz696me – hhh

+0

John:素晴らしい答えと、Rからの使用に非常に役立ちます。 timeseriesオブジェクト?私はMatLabを初めて使いました。もし私がそれを理解することができれば、それを一緒に送るでしょう。 – LGTrader

4

問題は明らかに、動作しているMatlabのインストールを前提としています。 Matlabオブジェクトのデータを使ってRでサンプルを構築する場合は、明らかに "R.matlab"パッケージにreadMatがあります。 Matlabファイルからデータを抽出し(またはサーバー接続を使用して)、Rでdputまたはdumpを使用することができます。ただMATLAB内部

は、少なくともドキュメントの私の読書にaccoring、私は(そしてそれは、MATLAB行列にのみ適用してもよい)を参照してくださいオプションは

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

本当にオプション(ではないがもありますされますMatlab-writeおよびR-read機能があるCommon Data Formatを使用していることを意味します。

+0

私はOPが実際にRの例を作成するのと同じ容易さでMATLABの例を構築したいと考えています。これは正しいです? –

+0

MATLABの 'save()'には、実際には "各変数は2次元の2文字または文字配列でなければなりません"という制限があります。さらに、これらはペースト可能ではありませんので、通常のバイナリ.mat表現を使用するだけでは使いやすさを伝えるメリットはありません。 –

関連する問題