このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
varfun
関数をテーブル変数または timetable 変数に適用
説明
は、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、名前と値の引数 B
= varfun(func
,A
,Name,Value
)GroupingVariables
を使用して、table 変数内のデータのグループに対して計算を実行できます。データのグループに対する計算の詳細については、データ グループに対する計算を参照してください。
例
要素単位関数の適用
要素単位関数を table の変数に適用します。
数値変数を含む table を作成します。
A = table([10.71;-2.05;-0.35;-0.82;1.57],[9.23;3.12;-1.18;0.23;16.41])
A=5×2 table
Var1 Var2
_____ _____
10.71 9.23
-2.05 3.12
-0.35 -1.18
-0.82 0.23
1.57 16.41
関数 round
を適用して、A
の数値を丸めます。varfun
への入力引数として関数を指定するには、@
記号を使用します。出力 table の変数名は、関数名と入力 table の変数名に基づきます。
B = varfun(@round,A)
B=5×2 table
round_Var1 round_Var2
__________ __________
11 9
-2 3
0 -1
-1 0
2 16
table 変数を削減する関数の適用
最初の次元に沿って table 変数を削減する sum
や max
などの関数を適用できます。たとえば、varfun
を使用して table 内の各変数の平均を計算します。
数値変数を含む table を作成します。
A = table([0.71;-2.05;-0.35;-0.82;1.57],[0.23;0.12;-0.18;0.23;0.41])
A=5×2 table
Var1 Var2
_____ _____
0.71 0.23
-2.05 0.12
-0.35 -0.18
-0.82 0.23
1.57 0.41
テーブルのすべての変数に関数 mean
を適用します。出力 table には、入力 table の各変数の平均値が含まれます。
B = varfun(@mean,A)
B=1×2 table
mean_Var1 mean_Var2
_________ _________
-0.188 0.162
varfun
が table ではなく数値ベクトルを返すようにするには、名前と値の引数 OutputFormat
を "uniform"
として指定します。"uniform"
出力形式を使用するには、func
は常にスカラーを返す必要があります。
B = varfun(@mean,A,"OutputFormat","uniform")
B = 1×2
-0.1880 0.1620
変数内のグループへの関数の適用
数値データ変数、およびグループ化変数である非数値変数をもつ table を作成します。次に、数値変数内の各グループに対して計算を実行します。
CSV (コンマ区切り値) ファイルから table にデータを読み取ります。このサンプル ファイルには、2 つの異なる学校の生徒の 10 人分のテストの得点が含まれています。
scores = readtable("testScores.csv","TextType","string"); scores.School = categorical(scores.School)
scores=10×5 table
LastName School Test1 Test2 Test3
__________ __________ _____ _____ _____
"Jeong" XYZ School 90 87 93
"Collins" XYZ School 87 85 83
"Torres" XYZ School 86 85 88
"Phillips" ABC School 75 80 72
"Ling" ABC School 89 86 87
"Ramirez" ABC School 96 92 98
"Lee" XYZ School 78 75 77
"Walker" ABC School 91 94 92
"Garcia" ABC School 86 83 85
"Chang" XYZ School 79 76 82
各テストの平均点を学校別に計算します。変数 Test1
、Test2
、および Test3
は数値データ変数です。変数 School
はグループ化変数です。グループ化変数を指定すると、その一意の値により、データ変数内の対応する値が属するグループが定義されます。
vars = ["Test1","Test2","Test3"]; meanScoresBySchool = varfun(@mean, ... scores, ... "InputVariables",vars, ... "GroupingVariables","School")
meanScoresBySchool=2×5 table
School GroupCount mean_Test1 mean_Test2 mean_Test3
__________ __________ __________ __________ __________
ABC School 5 87.4 87 86.8
XYZ School 5 84 81.6 84.6
出力 table には、そのグループに含まれる入力 table の行数を示す GroupCount
という変数が含まれます。
timetable 変数内のグループへの関数の適用
サンプル データを含む timetable を作成します。行時間は重複することがあるため、timetable の行時間でグループを定義できます。
Timestamps = datetime(2023,1,1)+days([0 1 1 2 3 3])'; A = timetable(Timestamps, ... [0.71;-2.05;-0.35;-0.82;1.57;0.09], ... [0.23;0.12;-0.18;0.23;0.41;0.02], ... 'VariableNames',["x","y"])
A=6×2 timetable
Timestamps x y
___________ _____ _____
01-Jan-2023 0.71 0.23
02-Jan-2023 -2.05 0.12
02-Jan-2023 -0.35 -0.18
03-Jan-2023 -0.82 0.23
04-Jan-2023 1.57 0.41
04-Jan-2023 0.09 0.02
timetable 内の変数の日単位の平均値を計算します。行時間のベクトルをグループ化変数として指定します。入力 A
が timetable であるため、出力 B
は timetable です。行時間のベクトルをグループ化変数として指定すると、いずれの変数も別のグループ化変数として指定できません。
B = varfun(@mean,A,"GroupingVariables","Timestamps")
B=4×3 timetable
Timestamps GroupCount mean_x mean_y
___________ __________ ______ ______
01-Jan-2023 1 0.71 0.23
02-Jan-2023 2 -1.2 -0.03
03-Jan-2023 1 -0.82 0.23
04-Jan-2023 2 0.83 0.215
適用される関数にオプション引数を渡す
関数を適用するときにオプション引数を渡すには、関数呼び出しを無名関数でラップします。
数値変数を含む table を作成します。table のいくつかの要素に NaN
を割り当てます。
A = table([10.71;-2.05;NaN;-0.82;1.57],[9.23;NaN;-1.18;0.23;16.41])
A=5×2 table
Var1 Var2
_____ _____
10.71 9.23
-2.05 NaN
NaN -1.18
-0.82 0.23
1.57 16.41
既定では、関数 mean
は、入力配列に NaN
がある場合は NaN
を返します。
B = varfun(@mean,A)
B=1×2 table
mean_Var1 mean_Var2
_________ _________
NaN NaN
mean
を適用するときに NaN
を除外するには、"omitnan"
オプションを指定します。このオプションを mean
を適用するときに使用するには、"omitnan"
を指定する呼び出しを無名関数でラップします。
func = @(x) mean(x,"omitnan");
無名関数を適用して、"omitnan"
で平均値を計算します。
C = varfun(func,A)
C=1×2 table
Fun_Var1 Fun_Var2
________ ________
2.3525 6.1725
入力引数
func
— 関数
関数ハンドル
関数。関数ハンドルとして指定します。既存の関数のハンドルを指定するか、ファイルで関数を定義するか、無名関数を指定できます。関数は 1 つの入力引数を受け取り、構文は次の形式でなければなりません。
result = f(arg)
A
の変数に対して f
を呼び出すには、次のように varfun
の呼び出しで func
を指定します。
func = @f; B = varfun(func,A);
varfun
は、A
の変数ごとに、その変数に対して func
を呼び出し、func
の出力を出力 B
の対応する変数として割り当てます。
追加の考慮事項を次にいくつか示します。
func
が表す関数には、追加のオプション引数をもつ構文がほかにも含まれる場合があります。ただし、varfun
が関数を呼び出すときは、入力引数を 1 つだけもつ構文を呼び出します。たとえば、関数
mean
には"omitnan"
などのオプション引数を指定する構文があります。ただし、func
を@mean
として指定した場合、varfun
はmean(arg)
構文を使用してmean
を呼び出します。オプション引数をもつ関数を呼び出すには、無名関数でラップします。たとえば、
"omitnan"
オプションを指定したmean
を呼び出すには、func
を@(x) mean(x,"omitnan")
として指定します。func
が呼び出されるたびに異なる行数の配列を返す場合、名前と値の引数OutputFormat
を"cell"
として指定します。それ以外の場合、func
は呼び出されるたびに同じ行数の配列を返さなければなりません。func
が複数の関数ファイルに対応している場合 (つまり、func
がオーバーロードされた関数セットを表す場合)、MATLAB® は入力引数のクラスに基づいて呼び出す関数を決定します。
例: B = varfun(@mean,A)
は、入力の平均値を計算します。
例: B = varfun(@(x) x.^2,A)
は、入力の各要素の二乗を計算します。
例: B = varfun(@(x) mean(x,"omitnan"),A)
は、"omitnan"
オプションを指定した mean
を呼び出します。
A
— 入力テーブル
table | timetable
入力 table。table または timetable として指定します。
名前と値の引数
引数のオプションのペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。
例: B = varfun(func,A,InputVariables=["Var2","Var3"])
は、A
の Var2
および Var3
という名前の変数のみを func
への入力として使用します。
R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name
を引用符で囲みます。
例: B = varfun(func,A,"InputVariables",["Var2","Var3"])
は、A
の Var2
および Var3
という名前の変数のみを func
への入力として使用します。
InputVariables
— func
に渡す A
の変数
正の整数 | 正の整数のベクトル | string 配列 | 文字ベクトル | 文字ベクトルの cell 配列 | pattern
スカラー | logical ベクトル | 関数ハンドル
func
に渡す A
の変数。次の表のインデックス方式のいずれかを使用して指定します。
インデックス方式 | 例 |
---|---|
変数名:
|
|
変数インデックス:
|
|
関数ハンドル:
|
|
例: B = varfun(func,A,InputVariables=[1 3 4])
は、A
の 1 番目、3 番目、および 4 番目の変数のみを func
への入力として使用します。
例: B = varfun(func,A,InputVariables=@isnumeric)
は、A
の数値変数のみを func
への入力として使用します。
GroupingVariables
— グループ化変数として使用する A
の変数
正の整数 | 正の整数のベクトル | string 配列 | 文字ベクトル | 文字ベクトルの cell 配列 | pattern
スカラー | logical ベクトル
グループ化変数として使用する A
の変数。次の表のインデックス方式のいずれかを使用して指定します。
インデックス方式 | 例 |
---|---|
変数名:
|
|
変数インデックス:
|
|
グループ化変数の一意の値によってグループが定義されます。A
内の行は、グループ化変数の値が同じであれば、同じグループに属します。varfun
は、変数全体ではなく、A
の残りの各変数内の行のグループごとに func
を適用します。グループ化変数を使用した計算の詳細については、データ グループに対する計算を参照してください。
グループ化変数は、次の表にリストされているデータ型のいずれかにすることができます。
グループを指定する値 | グループ化変数のデータ型 |
---|---|
数字 | 数値または logical ベクトル |
テキスト | string 配列または文字ベクトルの cell 配列 |
日付と時刻 |
|
カテゴリ |
|
ビン | ビン化された値のベクトル。数値、 |
多くのデータ型には、NaN
、NaT
、未定義の categorical
値、欠損 string など、欠損値を表現する方法があります。いずれかのグループ化変数に欠損値を表現できるデータ型が含まれている場合、そのグループ化変数で欠損値が発生する行はどのグループにも属さず、出力から除外されます。
行ラベルはグループ化変数にすることができます。行ラベルのみ、A
内の 1 つ以上の変数、または行ラベルと変数を同じグループにすることができます。
A
が table の場合、ラベルは行名です。A
が timetable の場合、ラベルは行時間です。
出力 B
には、入力 A
の行のグループごとに 1 つの行があります。B
が table または timetable の場合、B
は以下をもちます。
func
が適用された入力 table 変数に対応する変数グループ化変数に対応する変数
各グループ内の入力
A
の行数を値とする新しい変数GroupCount
B
が timetable の場合、B
は以下ももちます。
行時間。
A
の各行グループの最初の行時間が、B
の対応する行時間です。B
を行時間のない table として返すには、OutputFormat
を"table"
として指定します。
例: B = varfun(func,A,GroupingVariables="Var3")
は、A
の Var3
という名前の変数をグループ化変数として使用します。
例: B = varfun(func,A,GroupingVariables=["Var3","Var4"])
は、A
の Var3
および Var4
という名前の変数をグループ化変数として使用します。
例: B = varfun(func,A,GroupingVariables=[3 4])
は、A
の 3 番目および 4 番目の変数をグループ化変数として使用します。
OutputFormat
— B
の形式
"auto"
(既定値) | "table"
| "timetable"
| "uniform"
| "cell"
B
の形式。次の表のいずれかの値として指定します。
|
|
|
|
|
|
|
|
|
|
例: B = varfun(func,A,OutputFormat="uniform")
は、出力をベクトルとして返します。
ErrorHandler
— func
が失敗した場合に呼び出す関数
関数ハンドル
func
が失敗した場合に呼び出す関数。関数ハンドルとして指定します。func
がエラーをスローした場合、ErrorHandler
で指定されたエラー ハンドラー関数がエラーをキャッチし、その関数に指定されたアクションを実行します。エラー ハンドラーはエラーをスローするか、または func
と同じ出力数を返さなければなりません。
ErrorHandler
を指定しない場合、varfun
は func
からキャッチしたエラーを再スローします。
エラー ハンドラーの最初の入力引数は、次のフィールドをもつ構造体です。
cause
— エラーについての情報を含むMException
オブジェクト (R2024a 以降)index
— エラーが発生した変数のインデックスname
— エラーが発生した変数の名前
エラー ハンドラーの残りの入力引数は、func
がエラーをスローした原因である func
の呼び出しの入力引数です。
たとえば、func
が出力引数として 2 つの double を返すとします。エラー ハンドラーとして、警告を発行して 2 つの出力引数を返す関数を指定できます。
function [A,B] = errorFunc(S,varargin) warning(S.cause.identifier,S.cause.message); A = NaN; B = NaN; end
R2024a より前のリリースでは、エラー ハンドラーの最初の入力引数は次のフィールドをもつ構造体です。
identifier
— エラー識別子message
— エラー メッセージ テキストindex
— エラーが発生した変数のインデックスname
— エラーが発生した変数の名前
例: B = varfun(func,A,ErrorHandler=@errorFunc)
は、errorFunc
をエラー ハンドラーとして指定します。
出力引数
詳細
データ グループに対する計算
データ解析では、データ グループに対して計算を実行するのが一般的です。このような計算では、1 つ以上のデータ変数をデータ グループに分割し、各グループに対して計算を実行し、結果を 1 つ以上の出力変数に結合します。1 つ以上の "グループ化変数" を使用してグループを指定できます。グループ化変数の一意の値は、データ変数の対応する値が属するグループを定義します。
たとえばこの図は、6 行 1 列の数値ベクトルを 2 つのデータ グループに分け、各グループの平均を計算し、その出力を 2 行 1 列の数値ベクトルにまとめる単純なグループ化計算を示しています。6 行 1 列のグループ化変数には、AB
と XYZ
の 2 つの一意の値があります。
数値、テキスト、日時、カテゴリ、またはビンをもつグループ化変数を指定できます。
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
この関数は tall 配列を制限付きでサポートしています。
func
入力は常に tall 配列を返さなければなりません。サポートされる名前と値の引数は次のとおりです。
InputVariables
— 値を関数ハンドルまたはパターン式にすることはできません。GroupingVariables
— 値をパターン式にすることはできません。OutputFormat
— 値は"uniform"
、"table"
、"timetable"
または"cell"
のみです。
入力配列が tall timetable で
OutputFormat
が"timetable"
の場合、指定した関数は最初の次元のサイズが入力と同じである配列を返さなければなりません。入力関数がmean
などのリダクション関数の場合、OutputFormat
を"table"
として指定します。
詳細については、tall 配列を参照してください。
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
関数ハンドル入力
func
は定数でなければなりません。関数ハンドルを
varfun
自体への入力にすることはできますが、エントリ ポイント関数への入力にすることはできません。コード生成用のコード内ではfunc
を指定してください。詳細については、コード生成における関数ハンドルの制限事項 (MATLAB Coder)を参照してください。すべての名前と値の引数について、値は定数でなければなりません。
名前と値の引数
InputVariables
およびGroupingVariables
の値は、パターン式をサポートしません。名前と値の引数
ErrorHandler
はコード生成でサポートされていません。可変サイズの入力引数はサポートされていません。
グループ化変数に生成コードの重複する値を含めることはできません。
名前と値の引数
GroupingVariables
を指定し、関数からInputVariables
で指定した各変数について異なるデータ型が返される場合、OutputFormat
を"cell"
として指定することはできません。入力が timetable の場合に
GroupingVariables
を指定すると、出力は常に不規則な timetable になります。グループを指定した場合、コンパイル時にグループの数が不明で、その数がゼロになると、出力の空の double 変数が生成コードにおいて 1 行 0 列のサイズになることがあります。MATLAB では、そのような変数のサイズは 0 行 0 列になります。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
バージョン履歴
R2013b で導入R2023a: 名前と値の引数 OutputFormat
を "auto"
として指定して出力データ型を入力データ型と一致させる
データ型が入力のデータ型と一致する出力を返すには、名前と値の引数 OutputFormat
を "auto"
として指定します。この値は既定値です。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)