사용자 정의 함수란 사용자가 직접 정의하는 함수로, 여러 인수를 전달할 수 있는데 이 때 인수의 이름과 함께 정의하여야 한다.
인수는 Default 값을 가질 수 있으며 함수인수자리에 선언하면 된다. 이 때 앞의 인수가 기본값을 가지면 뒤의 인수도 기본값을 가져야 한다는 것이 기본 규칙이다. 이 말 뜻은 뒤에 설명하면서 예를 들어보겠다.
문법
함수명 <- function(....) {
내부로직
return (리턴객체)
}
숫자를 입력하면 곱하기 100을 하여 리턴하는 함수를 생성하여 보자.
두 숫자를 입력 받고 두 숫자의 합을 리턴하는 함수를 생성하여 보자.
아래의 코드는 에러가 나긴 하는데, x에 default 값을 선언한 경우 f1(30)을 하면 30은 어디로 들어갈까?
x로 들어가게 된다. 사실 위에 말했듯 앞에 있는 인수만 default 값을 선언한다는 것은 의미가 없고 에러가 난다. 즉 y의 기본값이 선언이 되어있지 않아 에러가 발생한다. R에서는 생성에는 문제가 없으나 파이썬은 생성부터 에러가 뜬다.
이렇게 y에도 기본값을 지정해줘야 에러가 나지 않고 f1(30)에 들어간 30은 x로 들어가고 y는 default로 들어간다.
Line 6 또한 x만 입력된 결과이며 따라서 30, 40만 출력된다.
Line 7 은 각 원소의 합이 리턴되어 40, 80이 리턴된다.
예시를 풀어보자. 급여를 입력하면 그 사람의 급여 등급이 리턴되는 함수를 생성하여라. 급여 등급은 아래와 같다.
2000이하는 C, 2000초과 3000이하는 B, 3000초과는 A이다.
scalar로 푼 결과이다. input value는 scalar 여서 emp$SAL이 들어가면 length error가 발생한다.
emp$SAL이 들어갔을 때 결과가 출력되도록 해결하여보자.
첫 번째 해결 방법: 여러 개의 급여를 입력하면 해당 급여의 등급 리턴 함수로 수정
위 풀이는 객체기반으로 풀었는데, 위치 기반으로 풀어서는 안된다(풀리기는 함). input value가 emp$SAL이기 때문이다. input value에 어울리는 문장이 되엉 한다. 결과적으로 아래 해결방법인 apply에 적용할 거라서 위치 기반은 소용이 없다.
두 번째 해결 방법: 반복을 도와주는 객체, 적용함수 사용(적용함수를 사용한 1차원 객체 fetch(sapply))
위의 원리는 f1(emp$SAL[1]), f1(emp$SAL[2]), f1(emp$SAL[3]), ...., f1(emp$SAL[14])를 하나씩도와주는 것과 같다.
즉 벡터 input과 벡터 output을 허용해주는 함수이다.
다음 게시물에서 적용함수에 대하여 자세히 작성해보도록 하겠다.
'배우기 > 복습노트[R과 분석]' 카테고리의 다른 글
[실습문제] 2023. 11. 29.(수) (4문제) (0) | 2023.12.01 |
---|---|
[복습] R(programming language) 적용함수(sapply) + 하루 끝(20231129) (0) | 2023.11.30 |
[실습문제] 2023. 11. 28.(화) (3문제) (0) | 2023.11.29 |
[복습] R(programming language)에서 날짜 추출하기(Sys.Date, Sys.time, lubridate 등) + 복습후기(20231128) (0) | 2023.11.29 |
[복습] R(programming language) 이전값 가져오기(zoo::na.locf) (0) | 2023.11.29 |