このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
rowfun
table または timetable の行への関数の適用
説明
は、1 つ以上の引数 B
= rowfun(func
,A
,Name,Value
)Name,Value
で指定された追加のオプションを使用して、関数 func
を table A
の各行に適用します。
たとえば、名前と値の引数 "GroupingVariables"
を使用して、行のグループに対して計算を実行できます。データのグループに対する計算の詳細については、データ グループに対する計算を参照してください。
例
行に対する単出力の関数の適用
数値データの 2 つの変数をもつ table A
を作成します。
rng('default')
X = randi(10,[5,1]);
Y = randi(10,[5,1]);
A = table(X,Y)
A=5×2 table
X Y
__ __
9 1
10 3
2 6
10 10
7 10
A
の各行に関数 plus
を適用します。関数呼び出し plus(X,Y)
は、演算 X + Y
と等価です。関数 plus
は 2 つの入力を受け入れ、1 つの出力を返します。rowfun
への入力引数として関数を指定するには、@
記号を使用します。
B = rowfun(@plus,A,"OutputVariableNames","Sum")
B=5×1 table
Sum
___
10
13
8
20
17
出力 table B
を入力 table A
に追加します。
C = [A B]
C=5×3 table
X Y Sum
__ __ ___
9 1 10
10 3 13
2 6 8
10 10 20
7 10 17
行に対する複数出力の関数の適用
複数の出力を返す関数を table の行に適用します。関数 rowfun
は、適用された関数の各出力を出力 table の変数内に格納します。
関数 readtable
を使用して、CSV (コンマ区切り値) ファイル testScores.csv
から table へデータを読み取ります。このサンプル ファイルには、2 つの異なる学校に通う生徒 10 人のテストの得点が含まれています。出力 table には、数値データをもつ変数とテキスト データをもつ他の変数が含まれます。これらの変数の 1 つ School
は、固定されたセットの値、つまりカテゴリをもっています。これらのカテゴリは、この table 内の 2 つの生徒グループを表します。School
をカテゴリカル変数に変換します。
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
各行のテストの最低点と最高点を求めるには、関数 bounds
を使用します。関数 bounds
は 2 つの出力引数を返すため、rowfun
を使用してそれを scores
に適用します。rowfun
の出力は、変数 TestMin
と変数 TestMax
をもつ新しい table です。この場合、さらに "SeparateInputs"
を false
と指定して、各行の値が bounds
に渡される前にベクトルに結合されるようにします。
vars = ["Test1","Test2","Test3"]; minmaxTest = rowfun(@bounds, ... scores, ... "InputVariables",vars, ... "OutputVariableNames",["TestMin","TestMax"], ... "SeparateInputs",false)
minmaxTest=10×2 table
TestMin TestMax
_______ _______
87 93
83 87
85 88
72 80
86 89
92 98
75 78
91 94
83 86
76 82
最小値と最大値を scores
に追加できます。
scores = [scores minmaxTest]
scores=10×7 table
LastName School Test1 Test2 Test3 TestMin TestMax
__________ __________ _____ _____ _____ _______ _______
"Jeong" XYZ School 90 87 93 87 93
"Collins" XYZ School 87 85 83 83 87
"Torres" XYZ School 86 85 88 85 88
"Phillips" ABC School 75 80 72 72 80
"Ling" ABC School 89 86 87 86 89
"Ramirez" ABC School 96 92 98 92 98
"Lee" XYZ School 78 75 77 75 78
"Walker" ABC School 91 94 92 91 94
"Garcia" ABC School 86 83 85 83 86
"Chang" XYZ School 79 76 82 76 82
行のグループへの関数の適用
入力 table の行のグループから取得したデータに関数を適用します。出力 table には、グループごとに 1 つの行が含まれます。
CSV (コンマ区切り値) ファイル testScores.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
各生徒のテストの平均点を計算し、新しい table 変数として追加します。これを行う 1 つの方法として、テストの数値得点を抽出し、2 番目の次元に沿って平均を計算できます。結果として、新しい変数として scores
に付加できる列ベクトルが得られます。
scores.TestMean = mean(scores{:,["Test1","Test2","Test3"]},2)
scores=10×6 table
LastName School Test1 Test2 Test3 TestMean
__________ __________ _____ _____ _____ ________
"Jeong" XYZ School 90 87 93 90
"Collins" XYZ School 87 85 83 85
"Torres" XYZ School 86 85 88 86.333
"Phillips" ABC School 75 80 72 75.667
"Ling" ABC School 89 86 87 87.333
"Ramirez" ABC School 96 92 98 95.333
"Lee" XYZ School 78 75 77 76.667
"Walker" ABC School 91 94 92 92.333
"Garcia" ABC School 86 83 85 84.667
"Chang" XYZ School 79 76 82 79
各学校でテストの平均点が最も高い生徒を求めます。添付のサポート関数 findNameAtMax
は、最高点とその得点を獲得した生徒の名前の両方を返します。findNameAtMax
を各生徒グループに適用するには、rowfun
を使用します。findNameAtMax
は複数の入力引数 (姓とテストの得点) を取り、複数の出力引数も返すため、関数 rowfun
が適しています。出力 table 内の変数 GroupCount
は、各学校の scores
内の行数を示しています。
maxScoresBySchool = rowfun(@findNameAtMax, ... scores, ... "InputVariables",["LastName","TestMean"], ... "GroupingVariables","School", ... "OutputVariableNames",["max_TestMean","LastName"])
maxScoresBySchool=2×4 table
School GroupCount max_TestMean LastName
__________ __________ ____________ _________
ABC School 5 95.333 "Ramirez"
XYZ School 5 90 "Jeong"
function [maxValue,lastName] = findNameAtMax(names,values) % Return maximum value and the last name % from the row at which the maximum value occurred [maxValue,maxIndex] = max(values); lastName = names(maxIndex); end
入力引数
func
— 関数
関数ハンドル
関数。関数ハンドルとして指定します。既存の関数のハンドルを指定するか、ファイルで関数を定義するか、無名関数として指定できます。func
が複数の関数ファイルに対応している場合 (つまり、func
がオーバーロードされた関数セットを表す場合)、MATLAB® は入力引数のクラスに基づいて呼び出す関数を決定します。
関数 func
は、width(A)
個の入力を受け入れなければなりません。既定の設定では、rowfun
は func
の最初の出力を返します。複数の出力を func
から返すには、名前と値の引数 "NumOutputs"
または "OutputVariableNames"
を使用します。
例: func = @minus;
は 2 つの入力を受け取り、最初の入力から 2 番目の入力を減算します。
例: func = @(x,y) x.^2+y.^2;
は 2 つの入力をとり、二乗和を求めます。
A
— 入力テーブル
table | timetable
入力テーブル。table または timetable として指定します。
名前と値の引数
引数のオプションのペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name
を引用符で囲みます。
例: InputVariables=["Var2","Var3"]
は、A
の Var2
および Var3
という名前の変数のみを func
への入力として使用します。
InputVariables
— func
に渡す A
の変数を選択する指定子
正の整数 | 正の整数のベクトル | string 配列 | 文字ベクトル | 文字ベクトルの cell 配列 | pattern
スカラー | logical ベクトル | 関数ハンドル
func
に渡す A
の変数を選択する指定子。"InputVariables"
と、正の整数、正の整数のベクトル、string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern
スカラー、logical ベクトル、または関数ハンドルとして指定します。
"InputVariables"
を関数ハンドルとして指定する場合、この関数ハンドルは logical スカラーを返さなければならず、rowfun
は関数が 1
(true
) を返した A
内の変数のみを渡します。
GroupingVariables
— グループ化変数にする A
の変数を選択する指定子
正の整数 | 正の整数のベクトル | string 配列 | 文字ベクトル | 文字ベクトルの cell 配列 | pattern
スカラー | logical ベクトル
グループ化変数にする A
の変数を選択する指定子。"GroupingVariables"
と、正の整数、正の整数のベクトル、string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern
スカラー、または logical ベクトルとして指定します。
グループ化変数の一意の値によってグループを指定します。A
内の行は、グループ化変数の値が同じであれば、同じグループに属します。rowfun
は func
を A
の各行に個別に適用するのではなく、行のグループごとに適用します。出力 B
には、グループごとに 1 つの行が含まれます。グループ化変数を使用した計算の詳細については、データ グループに対する計算を参照してください。
グループ化変数は、表にリストされているデータ型のいずれかにすることができます。
グループを指定する値 | グループ化変数のデータ型 |
---|---|
数字 | 数値または logical ベクトル |
テキスト | string 配列または文字ベクトルの cell 配列 |
日付と時刻 |
|
カテゴリ |
|
ビン | ビン化された値のベクトル。数値、 |
いずれかのグループ化変数に NaN
または欠損値 (NaT
、未定義の categorical
値、欠損 string など) が含まれている場合、それに対応する行はどのグループにも属さず、出力から除外されます。
行ラベルはグループ化変数にすることができます。行ラベルのみ、A
内の 1 つ以上の変数、または行ラベルと変数を同じグループにすることができます。
A
が table の場合、ラベルは行名です。A
が timetable の場合、ラベルは行時間です。
出力 B
には、入力 A
の行のグループごとに 1 つの行があります。B
が table または timetable の場合、B
は以下をもちます。
func
が適用された入力 table 変数に対応する変数。グループ化変数に対応する変数。
新しい変数
GroupCount
。その値は、各グループ内の入力A
の行数です。
メモ: B
が timetable の場合、B
は以下ももちます。
行時間。
A
の各行グループの最初の行時間が、B
の対応する行時間です。B
を行時間のない table として返すには、"OutputFormat"
を"table"
として指定します。
SeparateInputs
— 個々の入力で func
を呼び出すかどうかを示すインジケーター
true
(既定値) | false
| 1
| 0
個々の入力で func
を呼び出すかどうかを示すインジケーター。"SeparateInputs"
と、true
、false
、1
または 0
として指定します。
|
|
|
たとえば、 |
ExtractCellContents
— セル変数からの値を func
に渡すかどうかを示すインジケーター
false
(既定値) | true
| 0
| 1
cell 変数からの値を func
に渡すかどうかを示すインジケーター。"ExtractCellContents"
と、false
、true
、0
、または 1
のいずれかとして指定します。
|
グループ化された計算の場合は、cell 変数の各グループ内の値は垂直連結を許可しなければなりません。 |
|
これは既定の動作です。 |
OutputVariableNames
— func
の出力の変数名
文字ベクトル | 文字ベクトルの cell 配列 | string 配列
func
の出力の変数名。"OutputVariableNames"
と、空ではない一意の名前をもつ文字ベクトル、文字ベクトルの cell 配列、または string 配列として指定します。名前の数は、意図する func
の出力数と等しくなければなりません。
さらに、変数名は有効な MATLAB 識別子でなければなりません。有効な MATLAB 識別子が変数名として使用できない場合、MATLAB は {'Var1' ... 'Var
の形式で N
'}N
個の文字ベクトルをもつ cell 配列を使用します。ここで、N
は変数の数です。関数 isvarname
を使用して有効な MATLAB 変数名を確認できます。
NumOutputs
— func
からの出力数
0
| 正の整数
func
からの出力数。"NumOutputs"
と 0
または正の整数として指定します。整数は func
からの可能な出力数以下でなければなりません。
例: "NumOutputs",2
によって、rowfun
は 2 つの出力を指定して func
を呼び出します。
OutputFormat
— B
の形式
"auto"
(既定値) | "table"
| "timetable"
| "uniform"
| "cell"
B
の形式。"OutputFormat"
と、"auto"
、"table"
、"timetable"
、"uniform"
、または "cell"
の値として指定します。
|
|
|
|
|
|
|
|
|
|
ErrorHandler
— func
が失敗した場合に呼び出す関数
関数ハンドル
func
が失敗した場合に呼び出す関数。"ErrorHandler"
と関数ハンドルとして指定します。この関数を定義して、エラーを再スローするか、関数 func
に対して有効な出力を返すようにします。
MATLAB は、以下の 2 つの入力引数を使用して、指定されたエラー処理関数を呼び出します。
構造体には以下のフィールドがあります。
identifier
エラー識別子。
message
エラー メッセージ テキスト。
index
エラーが発生した行またはグループ インデックス。
エラー発生時の関数
func
への入力引数の集合。
以下に例を示します。
function [A, B] = errorFunc(S, varargin)
warning(S.identifier, S.message);
A = NaN; B = NaN;
出力引数
詳細
データ グループに対する計算
データ解析では、データ グループに対して計算を実行するのが一般的です。このような計算では、1 つ以上のデータ変数をデータ グループに分割し、各グループに対して計算を実行し、結果を 1 つ以上の出力変数に結合します。1 つ以上の "グループ化変数" を使用してグループを指定できます。グループ化変数の一意の値は、データ変数の対応する値が属するグループを定義します。
たとえばこの図は、6 行 1 列の数値ベクトルを 2 つのデータ グループに分け、各グループの平均を計算し、その出力を 2 行 1 列の数値ベクトルにまとめる単純なグループ化計算を示しています。6 行 1 列のグループ化変数には、AB
と XYZ
の 2 つの一意の値があります。
数値、テキスト、日時、カテゴリ、またはビンをもつグループ化変数を指定できます。
拡張機能
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
バージョン履歴
R2013b で導入R2023a: 名前と値の引数 "OutputFormat"
で値として "auto"
を受け取り可能
名前と値の引数 "OutputFormat"
で値として "auto"
を受け取ることができます。この値は既定値です。これにより、rowfun
は、入力 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)