2017-10-19 1 views
0

Matlabのtableを検討してください。異なる長さの文字列を既存のMatlabテーブルに連結/割り当てる方法は?

a = table(); 
a.c = 'a'; 

長さの異なる文字列を含む行を追加するにはどうすればよいですか?

b = table(); 
b.c = 'aa'; 
result = [a; b] 

エラー:

Could not concatenate the table variable 'c' using VERTCAT. Caused by: Error using vertcat Dimensions of matrices being concatenated are not consistent.

+0

単純な配列を使用してそれらを連結することにより、2つのテーブルをマージすることができます。セル配列を使用してみてください。 – Nivi

+1

'a = table(); a.c = {'a'; 'aa'} 'それをするか、' a = table(); a.c = {'a'}; a.c(end + 1,1)= {'aa'};最後に追加する – Wolfie

+0

@Wolfieありがとうございます!できます !コメントを回答に変換してください - 私はそれを受け入れます。 (私は最初の方法を知っています - ac = {'a'; 'aa'} - しかし、私はループしていて、{'a'; 'aa'}を事前に知っていないので使用できません。二番目の方法は大丈夫です!) –

答えて

1

あなたはデータの列全体を持っている場合は、(ループ内でのように)単一の項目を追加したい場合は、あなたが行うことができ、セルアレイ

tbl = table(); 
tbl.mycol = {'some text'; 
      'something else'; 
      'third item'}; 

から列を作成することができます

tbl = table(); 
mycell = {'some text'; 
      'something else'; 
      'third item'}; 
tbl.mycol = {}; 
for ii = 1:numel(mycell) 
    tbl.mycol(ii) = mycell(ii); 
end 

あなたは、配列

tbl.mycol(end+1) = {'fourth item'}; 

と同じように同様に、あなたは最後に追加することができます10

あなたは、異なる長さの文字列を処理していないvertcat

myothercell = {'append this'; 
       '...and this'}; 
tbl1 = table(); 
tbl1.mycol = mycell; 
tbl2 = table(); 
tbl2.mycol = myothercell; 

tbl3 = vertcat(tbl1, tbl2); 
1

によりMATLABのtableオブジェクトが含まれているどのように扱うかに

c 
______ 

'a'  
'aa' 

は、例えば、この単純な試みがエラーを与える:つまり私が取得したいですデータ、それはデータ型でスマートにしようとします。時には、場面の裏でスマートにしようとすると、必ずしもユーザーには必ずしも明らかではない方法でトリップしてしまいます。

c列が文字配列で作成されているため、MATLABはこの列を均等に保ち、'a''aa'に連結しようとします。これは、MATLABが文字の行列としてcharacter arraysを扱うためにエラーになります。これにはサイズの適用があります。すべての行の列数は同じでなければなりません。

string array(R2016bで導入)を使用するか、cell arrayを使用してください。文字列配列は基本的にはフードの下のセル配列ですが、専用の文字列メソッドを利用できるため、セル配列に明示的にインデックスを付けることなく、さまざまな文字列操作をネイティブに実行できます。

a = table(); 
a.c = "a"; 
b = table(); 
b.c = "aa"; 

T = [a;b] 

返します:

は、単に二重引用符( "")の代わりに、単一引用符( '')を使用し、あなたのコードを変更するには

T = 

    2×1 table 

    c 
    ____ 

    "a" 
    "aa" 

を代わりに、明示的の種類を強制することができますセルアレイとしてc

a = table(); 
a.c = {'a'}; 
b = table(); 
b.c = 'aa'; 

T = [a; b] 

これは同じものを返します。

関連する問題