Main Content

datasetfun

(非推奨) データセット配列変数への関数の適用

dataset データ型は推奨されません。異種混合データを処理するには、代わりに MATLAB® table データ型を使用します。詳細は、MATLAB table ドキュメンテーションを参照してください。

構文

b = datasetfun(fun,A)
[b,c,...] = datasetfun(fun,A)
[b,...] = datasetfun(fun,A,...,'UniformOutput',false)
[b,...] = datasetfun(fun,A,...,'DatasetOutput',true)
[b,...] = datasetfun(fun,A,...,'DataVars',vars)
[b,...] = datasetfun(fun,A,...,'ObsNames',obsnames)
[b,...] = datasetfun(fun,A,...,'ErrorHandler',efun)

説明

b = datasetfun(fun,A) は、fun が指定する関数をデータセット配列 A の個々の変数に適用して、その結果をベクトル b で返します。b の i 番目の要素は、A の i 番目のデータセット変数に適用される fun と等しくなります。fun は 1 つの入力引数をとり、スカラー値を返す関数への関数ハンドルです。fun は、呼び出されるたびに同じクラスの値を返さなければなりません。また、datasetfun は、それらの値をベクトル b に連結します。fun からの出力は、umeric、logical、character、structure、または cell のいずれかのデータ型でなければなりません。

非スカラー値またはサイズやデータ型の異なる結果を返す関数を適用するには、以下で説明する 'UniformOutput' または 'DatasetOutput' パラメーターを使用します。

datasetfunb の要素を計算する順序は指定されないので使用できません。

fun が複数の組み込み関数またはファイルにバインドされている場合 (すなわち、オーバーロードされた関数セットを表す場合)、datasetfun は MATLAB の処理規則に従って関数を呼び出します (関数の優先順位 を参照)。

[b,c,...] = datasetfun(fun,A) は、fun が複数の出力を返す関数の関数ハンドルである場合、fun の出力引数のいずれかにそれぞれ対応するベクトル bc... を返します。関数 datasetfun は、毎回 datasetfun への呼び出しにある出力と同じ数の出力を使用して fun を呼び出します。fun は、クラスの異なる出力引数を返すことができますが、各出力のクラスは fun が呼び出されるたびに同じでなければなりません。

[b,...] = datasetfun(fun,A,...,'UniformOutput',false) を使用すると、サイズやデータ型の異なる値を返す関数 fun を指定できます。datasetfun は、i 番目のセルに A の i 番目のデータセット変数に適用される fun の値を含む cell 配列 (または複数の cell 配列) を返します。'UniformOutput'true に設定したときの動作は、既定の設定の動作と同じです。

[b,...] = datasetfun(fun,A,...,'DatasetOutput',true) は、fun の出力がデータセット配列 (1 つまたは複数のデータセット配列) 内の変数として返されることを指定します。fun は、呼び出されるたびに同じ行数の値を返さなければなりません。ただし、値のデータ型は任意です。出力データセット配列内の変数名は、入力の変数の名前と同じになります。'DatasetOutput'false (既定値) に設定すると、datasetfun の出力のデータ型が 'UniformOutput' によって決定されます。

[b,...] = datasetfun(fun,A,...,'DataVars',vars) では、vars で指定される A 内のデータセット変数のみに fun を適用できます。vars は、正の整数、正の整数のベクトル、文字ベクトル、string 配列、文字ベクトルの cell 配列、または logical ベクトルです。

[b,...] = datasetfun(fun,A,...,'ObsNames',obsnames) は、'DatasetOutput'true の場合、データセット出力用の観測値の名前を指定します。

efun が関数ハンドルである [b,...] = datasetfun(fun,A,...,'ErrorHandler',efun) は、fun への呼び出しが失敗した場合に呼び出す MATLAB 関数を指定します。エラー処理関数は以下の入力引数を使って呼び出されます。

  • identifiermessage、および index という 3 つのフィールドをもつ構造体。これらのフィールドはそれぞれ、発生したエラーの識別子、エラー メッセージのテキスト、エラーが発生した (1 つまたは複数の) 入力配列への線形インデックスを格納しています。

  • 関数の呼び出しが失敗した入力引数の集合。

エラー処理関数は、エラーを再スローするか、fun と同じ数の出力を返します。これらの出力は、datasetfun の出力として返されます。'UniformOutput' が true の場合、エラー ハンドラーの出力も、fun の出力と同じ型のスカラー値にならなければなりません。たとえば、次のコードをエラー処理関数としてファイルに保存できます。

function [A,B] = errorFunc(S,varargin)

warning(S.identifier,S.message); 
A = NaN; 
B = NaN;

エラー処理関数が指定されない場合、fun の呼び出しからのエラーが再スローされます。

すべて展開する

関数ハンドルを使用して平均値を計算し、選択した変数のヒストグラムをデータセット配列にプロットします。

標本データを読み込みます。

load hospital

datasetfun を使用して Weight および BloodPressure 変数の平均を計算し、その結果をデータセット配列に格納します。

stats = datasetfun(@mean,hospital,...
        'DataVars',{'Weight','BloodPressure'},...
        'UniformOutput',false)
stats=1×2 cell array
    {[154]}    {[122.7800 82.9600]}

変数 BloodPressure には 2 つの列が含まれています。1 つは収縮期の測定値用、1 つは拡張期の測定値用です。

血圧変数の平均を表示します。

stats{2}
ans = 1×2

  122.7800   82.9600

血圧変数のヒストグラムをプロットします。

datasetfun(@hist,hospital,...
           'DataVars','BloodPressure',...
           'UniformOutput',false);
title('{\bf Blood Pressure}')
legend('Systolic','Diastolic','Location','N')

Figure contains an axes object. The axes object with title blank Blood blank Pressure contains 2 objects of type patch. These objects represent Systolic, Diastolic.

参考