Main Content

コード生成における table の制限事項

コード生成を目的とする MATLAB® コードで table を作成、変更したり、table 関数を使用する場合、コード生成には次の節で説明する制限があります。クラスに適用される制限は table にも適用されます。クラスの制限の詳細については、コード生成のための MATLAB クラスの定義を参照してください。

table 作成の制限事項

MATLAB コードで table を作成する場合、コード生成には次の制限があります。

table 作成の入力

制限

すべての入力

  • table 変数の名前は、有効な MATLAB 識別子である必要はありません。名前は ASCII 文字で構成されなければならず、コンマ、ダッシュ、空白文字を含めることができます。

入力配列から作成された table

  • 関数 tablearray2table または cell2table を使用して入力配列から table を作成する場合、'VariableNames' の名前と値の引数を使用して変数名を指定しなければなりません。

事前に割り当てられた変数を使用して作成された table

  • 関数 table'Size' の名前と値の引数を使用して table を事前に割り当てる場合、'VariableNames' 引数を指定する必要はありません。

  • 'VariableTypes' の名前と値の引数を使用して、以下のデータ型のみを指定できます。

    • 'double'

    • 'single'

    • 'doublenan' または 'doubleNaN'

    • 'singlenan' または 'singleNaN'

    • 'int8''int16''int32'、または 'int64'

    • 'uint8''uint16''uint32'、または 'uint64'

    • 'logical'

    • 'duration'

    • 'cellstr'

    • 'char'

table 変更の制限事項

MATLAB コートが table 内のデータまたはそのプロパティを変更する場合、コード生成には次の制限事項があります。

table 演算またはプロパティ

制限

VariableNamesRowNamesDimensionNames または UserData プロパティ

  • 作成した後に table の VariableNamesRowNamesDimensionNames または UserData プロパティを変更することはできません。

    table の作成時に 'VariableNames''RowNames''DimensionNames' の各入力引数を指定できます。これらの入力引数はプロパティを指定します。

変数を生成されたコードへの入力引数として指定する table インデックス

  • 変数を入力引数として指定する table インデックスを生成されたコードに渡すには、最初に関数 coder.Constant を使用してインデックスを定数にします。table インデックスが定数でない場合、変数にインデックス付けするとエラーが発生します。

カスタム メタデータ

  • カスタム メタデータは table に追加できません。関数 addprop と関数 rmprop はサポートされません。

table のサイズを変更する代入

  • 代入による table のサイズ変更はできません。たとえば、新しい行を追加するとエラーが発生します。

    function T = foo() %#codegen
        T = table((1:3)',(1:3)','VariableNames',{'Var1','Var2'});
        T(4,2) = 5;
    end
    

    行または変数を削除しても、エラーが発生します。

垂直方向の連結

  • table を垂直方向に連結する場合、同じ変数名を同じ順序でもたなければなりません。MATLAB では、変数名は同じでなければなりませんが、table では異なる順序にすることができます。

水平方向の連結

  • table を水平方向に連結し、table が行名をもつ場合、同じ行名を同じ順序でもたなければなりません。MATLAB では、行名は同じでなければなりませんが、table では異なる順序にすることができます。

N 次元 cell 配列である table 変数

  • 2 つの table に N 次元 cell 配列の変数がある場合、これらの table を垂直方向に連結することはできません。

  • この演算は水平連結であるため、中かっこを使用して N 次元 cell 配列である複数の table 変数からデータを抽出することはできません。

table 関数使用の制限事項

MATLAB コードが表に示されている関数を使用する場合、コード生成には次の制限事項があります。

関数

制限

convertvars

  • 関数ハンドルはサポートされません。

  • 2 番目および 3 番目の入力引数 (vars および dataType) は定数でなければなりません。

  • dataType'cell''cellstr'、または 'char' として指定できません。

innerjoin

  • 一般的に、入力 table には同じ名前をもつ非キー変数を含めることはできません。ただし、名前と値の引数 'LeftVariables''RightVariables' を指定する場合は入力 table のサブセットを連結できます。これらの引数については、いずれの変数名も 'LeftVariables''RightVariables' の両方に含まれることがないように指定してください。

  • 次の名前と値の引数の値は定数でなければなりません。

    • 'Keys'

    • 'LeftKeys'

    • 'RightKeys'

    • 'LeftVariables'

    • 'RightVariables'

  • 入れ子の table はサポートされません。

intersect

setdiff

setxor

union

  • これらの関数は、すべての場合において並べ替えられていない table をサポートします。'stable' オプションを指定する必要はありません。

issortedrows

  • 入力引数 vars は定数でなければなりません。

  • 任意の table 変数に複数の列がある場合、それらの変数は固定幅でなければなりません。

join

  • 一般的に、入力 table には同じ名前をもつ非キー変数を含めることはできません。ただし、次の名前と値の引数を指定する場合は入力 table のサブセットを連結できます。

    • 'KeepOneCopy'。左の入力 table のみから取得する変数をリストします。

    • 'LeftVariables''RightVariables'。左の入力 table と右の入力 table の両方ではなく一方のみから取得する変数をリストします。

  • 次の名前と値の引数の値は定数でなければなりません。

    • 'Keys'

    • 'LeftKeys'

    • 'RightKeys'

    • 'LeftVariables'

    • 'RightVariables'

    • 'KeepOneCopy'

  • 入れ子の table はサポートされません。

movevars

  • 入力引数 vars には重複した変数名を含めることができません。

outerjoin

  • 'MergeKeys' の値が true (logical 1) の場合を除き、入力 table に同じ名前をもつキー変数を含めることはできません。

  • 一般的に、入力 table には同じ名前をもつ非キー変数を含めることはできません。ただし、名前と値の引数 'LeftVariables''RightVariables' を指定する場合は入力 table のサブセットを連結できます。これらの引数については、いずれの変数名も 'LeftVariables''RightVariables' の両方に含まれることがないように指定してください。

  • 次の名前と値の引数の値は定数でなければなりません。

    • 'Keys'

    • 'LeftKeys'

    • 'RightKeys'

    • 'MergeKeys'

    • 'LeftVariables'

    • 'RightVariables'

    • 'Type'

  • 入れ子の table はサポートされません。

rows2vars

  • 入力 table を可変サイズにすることはできません。

  • 名前と値の引数 'VariableNamesSource' はサポートされていません。

  • 名前と値の引数 'DataVariables' の値は定数でなければなりません。

  • 名前と値の引数 'VariableNamingRule' の値は定数でなければなりません。

  • 行名を入力 table に割り当てた場合、行名のベクトルは定数でなければなりません。

sortrows

  • 入力引数 vars は定数でなければなりません。

  • tblA の変数が文字ベクトルの cell 配列で、複数の列を含む場合、その変数内の値を使用して table を並べ替えることはできません。

splitvars

  • 名前と値の引数 'NewVariableNames' の値は定数でなければなりません。

  • 分割された変数は、可変の列数をもつことはできません。

stack

  • 2 番目の入力引数 (vars) は定数でなければなりません。

  • 名前と値の引数 'ConstantVariables''NewDataVariableName'、および 'IndexVariableName' の値は定数でなければなりません。

unstack

  • 名前と値の引数 'NewDataVariableNames' を指定しなければなりません。その値は定数でなければなりません。

  • 入力引数 varsivars (データ変数および指標変数) は定数でなければなりません。

  • グループ化変数と定数変数を指定する場合、それらは定数でなければなりません。

  • 集積関数を指定する場合、定数でなければなりません。

  • 入力 table の変数が文字ベクトルの cell 配列である場合、unstack は、生成されたコード内で対応する出力変数内の空のセルを 1 行 0 列の文字配列で埋めます。MATLAB では、unstack はそのようなギャップを 0 行 0 列の文字配列で埋めます。

  • 入力 table に含まれる変数が同種 cell 配列に変換できない異種混合 cell 配列である場合、関数 unstack はコード生成をサポートしません。

    • 同種 cell 配列である変数、または同種 cell 配列に変換できる変数が入力にある場合、名前と値の引数 'AggregationFunction' を指定しなければなりません。'AggregationFunction' の既定値は 'unique' です。しかし、関数 unique では cell 配列はサポートされません。

varfun

  • 関数ハンドル入力 func は定数でなければなりません。

  • 関数ハンドルを varfun 自体への入力にすることはできますが、エントリポイント関数への入力にすることはできません。コード生成用のコード内で func を指定します。詳細については、コード生成における関数ハンドルの制限事項を参照してください。

  • すべての名前と値の引数の値は定数でなければなりません。

  • 名前と値の引数 'ErrorHandler' はコード生成でサポートされません。

  • 可変サイズの入力引数はサポートされません。

  • 生成されたコード内では、グループ化変数は重複する値をもつことができません。

  • 名前と値の引数 'GroupingVariables' を指定し、関数が 'InputVariables' で指定された各変数に対して異なるデータ型を返す場合、'OutputFormat' の値を 'cell' として指定することはできません。

  • グループを指定し、コンパイル時にグループの数が不明であり、その数がゼロであった場合、出力内の空の倍精度変数は、生成されたコード内で 1 行 0 列のサイズをもつ可能性があります。MATLAB では、こうした変数のサイズは 0 行 0 列です。

参考

| | |

関連するトピック