rowfun
테이블 또는 타임테이블 행에 함수 적용
설명
는 하나 이상의 이름-값 인수를 사용하여 옵션을 지정합니다. 예를 들어, B = rowfun(func,A,Name,Value)GroupingVariables 이름-값 인수를 사용하여 행 그룹에 대한 계산을 수행할 수 있습니다. 데이터 그룹 계산에 대한 자세한 내용은 데이터 그룹에 대한 계산 항목을 참조하십시오.
예제
숫자형 데이터로 구성된 두 개의 변수를 갖는 테이블을 만듭니다.
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
plus 함수를 테이블의 각 행에 적용합니다. 함수 호출 plus(X,Y)는 연산 X + Y와 동일합니다. plus 함수는 두 개의 입력값을 받아 하나의 출력값을 반환합니다. 함수를 rowfun에 대한 입력 인수로 지정하려면 @ 기호를 사용하십시오.
B = rowfun(@plus,A,"OutputVariableNames","Sum")
B=5×1 table
Sum
___
10
13
8
20
17
출력 테이블을 입력 테이블에 추가합니다.
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
여러 개의 출력값을 반환하는 함수를 테이블의 행에 적용합니다. rowfun 함수는 적용된 함수의 각 출력값을 출력 테이블의 변수 하나에 저장합니다.
CSV(쉼표로 구분된 값) 파일의 데이터를 테이블로 읽어옵니다. 샘플 파일에는 두 학교의 학생 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
각 행의 테스트 점수 최솟값과 최댓값을 구하려면 bounds 함수를 적용하십시오. bounds 함수는 두 개의 출력 인수를 반환합니다. rowfun의 출력값은 TestMin과 TestMax 변수를 포함하는 새 테이블입니다. 또한, 이 경우에는 각 행의 값들이 bounds로 전달되기 전에 벡터로 결합되도록 SeparateInputs 이름-값 인수를 false로 지정합니다.
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 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
입력 테이블의 행 그룹에 있는 데이터에 함수를 적용합니다. 출력 테이블은 각 그룹에 대해 하나의 행을 포함합니다.
CSV 파일의 데이터를 테이블로 읽어옵니다. 샘플 파일에는 두 학교의 학생 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
각 학생의 테스트 점수 평균을 계산하고 새 테이블 변수로 추가합니다. 숫자형 테스트 점수를 추출한 다음 두 번째 차원을 따라 평균을 계산할 수 있습니다. 결과는 열 벡터입니다. 이 열 벡터를 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를 적용합니다. 헬퍼 함수는 여러 개의 입력 인수(학생의 이름과 테스트 점수)를 받고 여러 개의 출력 인수(최고 점수와 학생의 이름)를 반환합니다. 출력 테이블의 변수 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"
헬퍼 함수
이 코드는 findNameAtMax 헬퍼 함수를 정의합니다.
function [maxValue,lastName] = findNameAtMax(names,values) % Return maximum value and the last name % from the row at which the maximum value occurs [maxValue,maxIndex] = max(values); lastName = names(maxIndex); end
함수를 적용할 때 선택적 인수를 전달하려면 함수 호출을 익명 함수에 래핑하십시오.
정수형 배열인 두 개의 변수를 갖는 테이블을 만듭니다.
X = int32(randi(10,[5,1])); Y = int32(randi(10,[5,1])); A = table(X,Y)
A=5×2 table
X Y
__ __
9 1
10 3
2 6
10 10
7 10
idivide 함수를 적용하여 두 테이블 변수에 대한 정수 나눗셈을 수행합니다.
B = rowfun(@idivide,A)
B=5×1 table
Var1
____
9
3
0
1
0
idivide 함수는 결과를 반올림하기 위한 몇 가지 옵션을 제공합니다. 디폴트 반올림 옵션은 "fix"입니다. idivide에 다른 반올림 옵션을 사용하려면 익명 함수에 해당 옵션을 지정하는 호출을 래핑하십시오. 예를 들어, "ceil"을 반올림 옵션으로 지정합니다.
func = @(x,y) idivide(x,y,"ceil");익명 함수를 적용하여 "ceil"로 정수 나눗셈을 수행합니다.
C = rowfun(func,A)
C=5×1 table
Var1
____
9
4
1
1
1
입력 인수
함수로, 함수 핸들로 지정됩니다. 기존 함수의 핸들을 지정하거나, 함수를 파일에 정의하거나, 익명 함수를 지정할 수 있습니다. 이 함수는 N개의 입력 인수를 받으며(여기서 N = width(A)임), 다음과 같은 형식의 구문을 가져야 합니다.
result = f(arg1, . . . ,argN)
A의 행에 대해 f를 호출하려면 rowfun에 대한 다음 호출에 표시된 것과 같이 func를 지정합니다.
func = @f; B = rowfun(func,A);
A의 모든 행에서, rowfun은 각 행에 대해 func를 호출한 다음 func의 출력값을 B의 대응되는 행에 할당합니다. 출력값 B는 하나의 변수를 갖습니다.
추가 고려 사항:
func가 나타내는 함수가 선택적 추가 인수가 있는 다른 구문을 가질 수 있습니다. 그러나rowfun은 함수를 호출할 때 적절한 개수의 입력 인수가 있는 구문을 호출합니다.예를 들어,
idivide함수는 세 번째 선택적 인수를 지정하는 구문을 갖습니다. 그러나func를@idivide로 지정할 경우rowfun은idivide(arg1,arg2)구문을 사용하여idivide를 호출합니다.선택적 인수와 함께 함수를 호출하려면 해당 함수를 익명 함수에 래핑하십시오. 예를 들어,
"ceil"옵션과 함께idivide를 호출하려면func를@(x,y) idivide(x,y,"ceil")로 지정하십시오.func의 출력값을 두 개 이상 반환하려면NumOutputs또는OutputVariableNames이름-값 인수를 사용하십시오. 이런 경우 출력값B는func의 각 출력값마다 하나씩 여러 개의 변수를 가집니다.func가 호출될 때마다 행 개수가 다른 배열을 반환하는 경우에는OutputFormat이름-값 인수를"cell"로 지정하십시오. 그러지 않을 경우,func는 호출될 때마다 행 개수가 같은 배열을 반환해야 합니다.func가 둘 이상의 함수 파일에 대응하는 경우(즉,func가 일련의 오버로드된 함수를 나타내는 경우) MATLAB®은 입력 인수의 클래스에 따라 어떤 함수를 호출할지를 결정합니다.
예: B = rowfun(@idivide,A)는 정수 나눗셈을 수행합니다. A는 둘 다 정수 클래스에 속하는 두 개의 변수를 갖는 테이블입니다. B는 하나의 변수를 갖는 테이블입니다.
예: B = rowfun(@(x,y) x.^2+y.^2,A)는 A에 있는 두 변수의 제곱합을 계산합니다.
예: B = rowfun(@(x,y) idivide(x,y,"ceil"),A)는 "ceil" 옵션과 함께 idivide 함수를 적용하여 정수 나눗셈을 수행합니다.
입력 테이블로, table형 또는 timetable형으로 지정됩니다.
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
예: B = rowfun(func,A,InputVariables=["Var2","Var3"])은 func의 입력값으로 A의 Var2 변수와 Var3 변수만 사용합니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.
예: B = rowfun(func,A,"InputVariables",["Var2","Var3"])은 func의 입력값으로 A의 Var2 변수와 Var3 변수만 사용합니다.
func에 전달할 A의 변수로, 다음 표의 인덱싱 방식 중 하나를 사용하여 지정됩니다.
| 인덱싱 방식 | 예제 |
|---|---|
변수 이름:
|
|
변수 인덱스:
|
|
함수 핸들:
|
|
예: B = rowfun(func,A,InputVariables=[1 3 4])는 A의 첫 번째, 세 번째, 네 번째 변수만 func에 대한 입력값으로 사용합니다.
예: B = rowfun(func,A,InputVariables=@isnumeric)은 A의 숫자형 변수만 func에 대한 입력값으로 사용합니다.
그룹화 변수로 사용할 A의 변수로, 다음 표의 인덱싱 방식 중 하나를 사용하여 지정됩니다.
| 인덱싱 방식 | 예제 |
|---|---|
변수 이름:
|
|
변수 인덱스:
|
|
그룹화 변수의 고유한 값은 그룹을 정의합니다. A에서 그룹화 변수 값이 같은 행은 같은 그룹에 속합니다. rowfun은 func를 A의 각 행에 개별적으로 적용하는 대신 각 행 그룹에 적용합니다. 출력값 B는 각 그룹에 대해 하나의 행을 포함합니다. 그룹화 변수를 사용한 계산에 대한 자세한 내용은 데이터 그룹에 대한 계산 항목을 참조하십시오.
그룹화 변수는 다음 표에 나열된 임의의 데이터형을 가질 수 있습니다.
그룹을 지정하는 값 | 그룹화 변수의 데이터형 |
|---|---|
숫자 | 숫자형 벡터 또는 논리형 벡터 |
텍스트 | string형 배열, 또는 문자형 벡터로 구성된 셀형 배열 |
날짜/시간 |
|
범주 |
|
Bin | 숫자형 값, |
데이터형 중 많은 수가 NaN, NaT, 정의되지 않은 categorical형 값 또는 누락값인 string형과 같이 누락값을 표현하는 다양한 방법을 가지고 있습니다. 그룹화 변수가 누락값을 표현할 수 있는 데이터형을 갖는 경우, 해당 그룹화 변수에 누락값이 있는 행은 어떤 그룹에도 속하지 않으며 출력값에서 제외됩니다.
그룹화 변수에 누락값이 있는 행을 포함하려면 대신 groupsummary 함수를 사용해 보십시오.
행 레이블은 그룹화 변수일 수 있습니다. 사용자는 행 레이블만을 기준으로, 또는 하나 이상의 A의 변수를 기준으로, 또는 행 레이블과 변수를 함께 기준으로 하여 그룹화할 수 있습니다.
A가 테이블인 경우 레이블은 행 이름입니다.A가 타임테이블인 경우 레이블은 행 시간값입니다.
출력값 B는 입력값 A의 각 행 그룹에 대해 하나의 행을 가집니다. B가 테이블 또는 타임테이블이면 B는 다음을 포함합니다.
func가 적용된 입력 테이블 변수에 대응하는 변수그룹화 변수에 대응하는 변수
값이 각 그룹에 있는 입력값
A의 행 개수인 새로운 변수GroupCount
B가 타임테이블이면 B는 다음도 포함합니다.
A의 각 행 그룹의 첫 번째 행 시간값이B의 대응하는 행 시간값인 행 시간값.B를 행 시간값이 없는 테이블로 반환하려면OutputFormat을"table"로 지정하십시오.
예: B = rowfun(func,A,GroupingVariables="Var3")은 A에 포함된 Var3이라는 이름의 변수를 그룹화 변수로 사용합니다.
예: B = rowfun(func,A,GroupingVariables=["Var3","Var4"])는 A에 포함된 Var3이라는 이름의 변수와 Var4라는 이름의 변수를 그룹화 변수로 사용합니다.
예: B = rowfun(func,A,GroupingVariables=[3 4])는 A의 세 번째 변수와 네 번째 변수를 그룹화 변수로 사용합니다.
개별 입력값으로 func를 호출하는 옵션으로, 숫자형 또는 논리값 1(true) 또는 0(false)으로 지정됩니다.
SeparateInputs가true인 경우,func는 개별 입력값을 필요로 합니다.rowfun은 각 데이터 변수에 대해 하나의 인수를 사용해width(A)개 입력값으로func를 호출합니다.SeparateInputs가false인 경우,func는 모든 입력값을 포함하는 하나의 인수를 필요로 합니다.rowfun은A의 각 행에 있는 값들을 결합하여func에 대한 입력 인수를 만듭니다.예를 들어,
A가 세 개의 변수를 갖는 테이블이고 각 변수가 숫자형 벡터인 경우,SeparateInputs를false로 지정하면rowfun이 세 개의 숫자형 벡터를 하나의 숫자형 행렬로 결합합니다. 이 행렬은 세 개의 열을 갖습니다. 그런 다음rowfun이 이 행렬을func에 하나의 입력 인수로 전달합니다.
예: B = rowfun(@mean,A,SeparateInputs=false)는 N개의 테이블 변수에 있는 내용들을 한 배열의 열인 것처럼 처리하므로 A의 각 행을 mean에 전달되는 벡터로 처리할 수 있습니다.
셀형 변수에서 func로 값을 전달하는 옵션으로, 숫자형 또는 논리값 0(false) 또는 1(true)로 지정됩니다.
ExtractCellContents가true인 경우,rowfun은 데이터형이cell인A의 변수의 내용을 추출해 셀이 아니라 그 셀의 값을func에 전달합니다.그룹화 계산의 경우, 셀형 변수의 각 그룹 내 값은 세로 결합이 가능해야 합니다.
ExtractCellContents가false인 경우,rowfun은 데이터형이cell인A의 변수의 셀을func에 전달합니다.
예: B = rowfun(func,A,ExtractCellContents=true)는 셀형 배열인 변수에서 셀 내용을 추출합니다.
func의 출력값에 대한 변수 이름으로, 비어 있지 않은 고유한 이름을 갖는 string형 배열, 문자형 벡터, 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. 이름의 개수는 func의 출력값의 개수와 같아야 합니다.
변수 이름은 유효한 MATLAB 식별자여야 합니다. 유효한 MATLAB 식별자를 변수 이름으로 사용할 수 없는 경우 MATLAB은 {'Var1' ... 'Var 형식의 N'}N개 문자형 벡터로 구성된 셀형 배열을 사용합니다. 여기서 N은 변수의 개수입니다. 유효한 MATLAB 변수 이름은 함수 isvarname을 사용하여 확인할 수 있습니다.
예: B = rowfun(func,A,OutputVariableNames=["V1","V2"])는 V1과 V2라는 두 개의 변수가 포함된 출력 테이블을 반환합니다.
func의 출력값 개수로, 음이 아닌 정수로 지정됩니다. 정수는 func에서 가능한 출력값 개수보다 작거나 같아야 합니다.
예: B = rowfun(func,A,NumOutputs=2)는 func에서 두 개의 출력값을 반환합니다.
B의 형식으로, 다음 표에 있는 값 중 하나로 지정됩니다.
|
|
|
|
|
|
|
|
|
|
예: B = rowfun(func,A,OutputFormat="uniform")은 출력값을 벡터로 반환합니다.
func가 실패할 경우 호출할 함수로, 함수 핸들로 지정됩니다. func에서 오류가 발생하면 ErrorHandler로 지정된 오류 핸들러 함수는 오류를 포착하고 지정된 동작을 수행합니다.
오류 핸들러 함수는 다음 요구 사항을 충족해야 합니다.
오류 핸들러 함수의 정의는
func의 출력 인수의 개수 및 데이터형과 일치하는 출력 인수를 반환하도록 지정해야 합니다.호출할 경우 오류 핸들러 함수는 오류를 발생시키거나 출력 인수를 반환할 수 있습니다. 오류 핸들러가 항상 오류를 발생시키더라도 해당 정의는
func와 동일한 유형과 개수의 출력 인수를 반환하도록 지정해야 합니다.오류 핸들러 함수는 익명 함수일 수 없습니다.
대신 로컬 함수로 작성하십시오. 로컬 함수를 스크립트에 정의할 수도 있습니다. 로컬 함수를 별도의 파일에 작성할 필요는 없습니다.
ErrorHandler를 지정하지 않을 경우 rowfun은 func에서 포착한 오류를 다시 발생시킵니다.
오류 핸들러의 첫 번째 입력 인수는 다음 필드를 포함하는 구조체입니다.
cause— 오류에 대한 정보가 포함된MException객체 (R2024a 이후)index— 오류가 발생한 행 또는 그룹의 인덱스
오류 핸들러에 대한 나머지 입력 인수는 func에서의 오류 발생을 초래한, func 호출에 대한 입력 인수입니다.
예를 들어, func가 두 개의 double형을 출력 인수로 반환한다고 가정하겠습니다. 오류 핸들러를 경고를 발생시키고 두 개의 출력 인수를 반환하는 함수로 지정할 수 있습니다.
function [A,B] = errorFunc(S,varargin) warning(S.cause.identifier,S.cause.message); A = NaN; B = NaN; end
R2024a 이전 릴리스에서 오류 핸들러의 첫 번째 입력 인수는 다음 필드를 포함하는 구조체입니다.
identifier— 오류 IDmessage— 오류 메시지 텍스트index— 오류가 발생한 행 또는 그룹의 인덱스
예: B = rowfun(func,A,ErrorHandler=@errorFunc)는 errorFunc를 오류 핸들러로 지정합니다.
출력 인수
세부 정보
데이터 분석에서는 일반적으로 데이터 그룹에 대한 계산을 수행합니다. 이러한 계산의 경우 하나 이상의 데이터 변수를 데이터 그룹으로 분할하고, 각 그룹에 대해 계산을 수행하고, 결과를 하나 이상의 출력 변수로 조합합니다. 하나 이상의 그룹화 변수를 사용하여 그룹을 지정할 수 있습니다. 그룹화 변수의 고유 값은 데이터 변수의 대응값이 속하는 그룹을 정의합니다.
예를 들어, 다음 도식은 6×1 숫자형 벡터를 두 개의 데이터 그룹으로 분할하고 각 그룹의 평균을 계산한 다음 출력값을 2×1 숫자형 벡터로 조합하는 그룹화된 간단한 계산을 보여줍니다. 6×1 그룹화 변수에는 두 개의 고유한 값 AB와 XYZ가 있습니다.

숫자, 텍스트, 날짜/시간, 범주 또는 Bin이 포함된 그룹화 변수를 지정할 수 있습니다.
확장 기능
스레드 기반 환경
MATLAB®의 backgroundPool을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool을 사용해 코드 실행 속도를 높일 수 있습니다.
버전 내역
R2013b에 개발됨데이터형이 입력값의 데이터형과 일치하는 출력값을 반환하려면 OutputFormat 이름-값 인수를 "auto"로 지정하십시오. 이 값은 디폴트 값입니다.
참고 항목
varfun | cellfun | structfun | arrayfun | isvarname | findgroups | splitapply | groupsummary | convertvars | vartype
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- 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)