このページの内容は最新ではありません。ここをクリックして、最新版の英語を参照してください。
varfun
関数をテーブル変数または timetable 変数に適用
説明
は、関数 B
= varfun(func
,A
)func
を table または timetable A
の各変数に個別に適用し、結果を table または timetable B
で返します。
関数 func
は入力引数 を 1 つ取り、この関数が呼び出されるたびに、同じ行数の配列を返さなければなりません。出力引数 B{:,i}
の i
番目の変数は func(A{:,i})
と等しくなります。
A
が timetable で、func
が行グループのデータを集約する場合、varfun
は A
の各行グループの最初の行時間を B
の対応する行時間として割り当てます。B
を行時間のないテーブルとして返すには、'OutputFormat'
を 'table'
として指定します。
は、1 つ以上の B
= varfun(func
,A
,Name,Value
)Name,Value
のペアの引数で指定された追加のオプションを使用して、関数 func
を table または timetable A
の各変数に個別に適用します。
たとえば、関数にどの変数を渡すかを指定できます。
例
要素単位関数の適用
すべての要素の二乗を求める要素単位関数を定義し、テーブルの変数に適用します。
数値変数を含むテーブルを定義します。
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
入力の二乗を求める無名関数を定義します。
func = @(x) x.^2;
テーブル A
のすべての変数に関数を適用します。
B = varfun(func,A)
B=5×2 table
Fun_Var1 Fun_Var2
________ ________
0.5041 0.0529
4.2025 0.0144
0.1225 0.0324
0.6724 0.0529
2.4649 0.1681
B
の変数には、関数と A
の変数名に基づいて名前が付けられます。
ベクトルからスカラーを返す関数の適用
5 行 2 列のテーブルで、各変数の平均値を計算します。
数値変数を含むテーブルを定義します。
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
入力の平均値を求める無名関数を定義します。
func = @mean;
func
は既存の MATLAB® 関数を使用して、演算を定義します。
テーブル A
のすべての変数に関数を適用します。
B = varfun(func,A)
B=1×2 table
mean_Var1 mean_Var2
_________ _________
-0.188 0.162
B
は、各変数からの平均値を含むテーブルです。テーブルではなく数値ベクトルを返すには、B = varfun(func,A,'OutputFormat','uniform')
を使用します。
変数内のグループへの関数の適用
テーブル A
で変数のグループ単位の平均値を計算し、テーブル B
の行として返します。
1 つの変数が複数のグループを定義するテーブルを作成します。
A = table({'test2';'test1';'test2';'test3';'test1'},... [0.71;-2.05;-0.35;-0.82;1.57],[0.23;0.12;-0.18;0.23;0.41])
A=5×3 table
Var1 Var2 Var3
_________ _____ _____
{'test2'} 0.71 0.23
{'test1'} -2.05 0.12
{'test2'} -0.35 -0.18
{'test3'} -0.82 0.23
{'test1'} 1.57 0.41
入力の平均値を求める無名関数を定義します。
func = @mean;
func
は既存の MATLAB® 関数を使用して、演算を定義します。
Var1
によって定義されるデータのグループごとに、関数を適用します。
B = varfun(func,A,'GroupingVariables','Var1')
B=3×4 table
Var1 GroupCount mean_Var2 mean_Var3
_________ __________ _________ _________
{'test1'} 2 -0.24 0.265
{'test2'} 2 0.18 0.025
{'test3'} 1 -0.82 0.23
B
には、そのグループに含まれるテーブル A
からのエントリ数を示す GroupCount
という変数が含まれます。
timetable 変数内のグループへの関数の適用
サンプル データを含む timetable を作成します。timetable の行時間はグループも定義します。
dt = datetime(2016,1,1)+days([0 1 1 2 3 3])'; A = timetable(dt,[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
dt x y
___________ _____ _____
01-Jan-2016 0.71 0.23
02-Jan-2016 -2.05 0.12
02-Jan-2016 -0.35 -0.18
03-Jan-2016 -0.82 0.23
04-Jan-2016 1.57 0.41
04-Jan-2016 0.09 0.02
timetable 内の変数のグループ単位での平均を計算します。varfun
は、A
が timetable であるため、B
を timetable として返します。行時間をグループ化変数として指定すると、いずれの変数も別のグループ化変数として指定できません。
B = varfun(@mean,A,'GroupingVariables','dt')
B=4×3 timetable
dt GroupCount mean_x mean_y
___________ __________ ______ ______
01-Jan-2016 1 0.71 0.23
02-Jan-2016 2 -1.2 -0.03
03-Jan-2016 1 -0.82 0.23
04-Jan-2016 2 0.83 0.215
入力引数
func
— 関数
関数ハンドル
関数。関数ハンドルとして指定します。関数は、ファイルで定義するか、無名関数として定義できます。func
が複数の関数ファイルに対応している場合 (つまり、func
がオーバーロードされた関数セットを表す場合)、MATLAB® は入力引数のクラスに基づいて呼び出す関数を決定します。
関数 func
が入力引数を 1 つ取り、この関数が呼び出されるたびに異なる行数の配列を返す場合、'OutputFormat','cell'
名前と値のペアの引数を使用します。それ以外の場合、func
は、同じ行数の配列を返さなければなりません。
例: func = @(x) x.^2;
は、入力の各要素の二乗を計算します。
A
— 入力テーブル
table | timetable
入力テーブル。table または timetable として指定します。
名前と値の引数
引数のオプションのペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name
を引用符で囲みます。
例: 'InputVariables',2
は、A
の 2 番目の変数のみを func
への入力として使用します。
InputVariables
— func
に渡す A
の変数を選択する指定子
正の整数 | 正の整数のベクトル | string 配列 | 文字ベクトル | 文字ベクトルの cell 配列 | pattern
スカラー | logical ベクトル | 関数ハンドル
func
に渡す A
の変数を選択する指定子。'InputVariables'
と、正の整数、正の整数のベクトル、string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern
スカラー、logical ベクトル、または関数ハンドルのいずれかで構成されるコンマ区切りのペアとして指定します。
'InputVariables'
を関数ハンドルとして指定する場合、この関数ハンドルは logical スカラーを返さなければならず、varfun
は関数が 1
(true
) を返した A
内の変数のみを渡します。
GroupingVariables
— 行のグループを定義する A
内の 1 つ以上の変数
正の整数 | 正の整数のベクトル | string 配列 | 文字ベクトル | 文字ベクトルの cell 配列 | pattern
スカラー | logical ベクトル
行のグループを定義する A
内の 1 つ以上の変数。'GroupingVariables'
と、正の整数、正の整数のベクトル、string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern
スカラー、または logical ベクトルのいずれかで構成されるコンマ区切りのペアとして指定します。
'GroupingVariables'
の値はどの table 変数がグループ化変数であるかを指定するもので、そのデータ型を指定するものではありません。グループ化変数は数値として指定するか、categorical
、calendarDuration
、datetime
、duration
、logical
、または string
のデータ型をもつことができます。
A
内でグループ化変数の値が同じ行は、同じグループに属します。varfun
は func
を各変数全体に適用するのではなく、A
の各変数内の行グループごとに適用します。
いずれかのグループ化変数に NaN
または欠損値 (NaT
、未定義の categorical 値、欠損 string など) が含まれている場合、それに対応する行はどのグループにも属さず、出力から除外されます。
行ラベルはグループ化変数にすることができます。行ラベルのみ、A
内の 1 つ以上の変数、または行ラベルと変数を同じグループにすることができます。
A
が table の場合、ラベルは行名です。A
が timetable の場合、ラベルは行時間です。
出力 B
には、入力 A
の行のグループごとに 1 つの行があります。
'OutputFormat','uniform'
または'OutputFormat','cell'
を指定すると、出力はfunc
が適用された入力 table 変数に対応する列数をもちます。'OutputFormat','table'
または'OutputFormat','timetable'
を指定すると、出力には以下が含まれます。func
が適用された入力 table 変数に対応する変数。グループ化変数に対応する変数。
新しい変数
GroupCount
。その値は、各グループ内の入力A
の行数です。
OutputFormat
— B
の形式
'auto'
(既定値) | 'table'
| 'timetable'
| 'uniform'
| 'cell'
B
の形式。'OutputFormat'
と、'auto'
、'table'
、'timetable'
、'uniform'
、または 'cell'
の値で構成されるコンマ区切りのペアとして指定します。
|
|
|
|
|
|
|
|
|
|
ErrorHandler
— func
が失敗した場合に呼び出す関数
関数ハンドル
func
が失敗した場合に呼び出す関数。'ErrorHandler'
と関数ハンドルで構成されるコンマ区切りのペアとして指定します。この関数を定義して、エラーを再スローするか、関数 func
に対して有効な出力を返すようにします。
MATLAB は、以下の 2 つの入力引数を使用して、指定されたエラー処理関数を呼び出します。
構造体には以下のフィールドがあります。
identifier
エラー識別子。
message
エラー メッセージ テキスト。
index
エラーが発生した変数のインデックス。
name
エラーが発生した変数の名前。
エラー発生時の関数
func
への入力引数の集合。
以下に例を示します。
function [A, B] = errorFunc(S, varargin)
warning(S.identifier, S.message)
A = NaN; B = NaN;
出力引数
拡張機能
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 列になります。
バージョン履歴
R2013b で導入R2023a: 名前と値の引数 'OutputFormat'
で値として 'auto'
を受け取り可能
名前と値の引数 'OutputFormat'
で値として 'auto'
を受け取ることができます。この値は既定値です。これにより、varfun
は、入力 A
のデータ型に一致するデータ型をもつ出力を返します。
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)