해당 포스트에서는 R에서 함수(function)를 사용할 때
return()
함수를 사용해야 하는 이유에 대해 설명합니다.
1. INTRO
R에서 사용자 정의 함수(User Defined Function)를 만들 때는 return()
함수가 반드시 필요합니다.
return()
함수를 왜 사용해야 하는지, return()
함수 사용 유무에 따라 어떤 차이가 있는지 아래에서 설명하겠습니다.
2. return() 함수를 사용한 정상적인 사용자 함수
설명을 위해 숫자 2개 곱하기 함수를 만들고 return()
함수 유무에 따른 차이를 비교해 보겠습니다.
return()
사용 유무의 차이는 결괏값을 변수에 저장해 보면 알 수 있으며, 아래에서는 단순 출력과 저장 후 출력의 차이를 비교해 설명합니다.
함수 생성
먼저 비교에 사용할 두 수의 곱을 계산하는 사용자 함수(multi_two_return
)를 만들어 보겠습니다.
두 개의 입력값 x
와 y
를 받아 곱을 계산하고 res
에 저장한 뒤 return()
함수로 결과를 반환해 줍니다.
multi_two_return <- function(x, y){
res <- x * y
return(res)
}
함수 호출
위에서 생성한 multi_two_return()
함수에 5
와 9
를 입력하여 함수의 결과를 살펴보면, 아래와 같이 45
라는 계산값이 정상 출력되는 것을 볼 수 있습니다.
multi_two_return(5, 9)
[1] 45
변수 저장 후 출력
이번에는 결괏값을 새로운 변수 res1
에 저장한 뒤 출력해 보겠습니다. 아래 결과를 보면 위에서와 같이 동일하게 45
라는 계산값이 정상 출력되는 것을 볼 수 있습니다.
res1 <- multi_two_return(5, 9)
res1
[1] 45
3. return() 함수를 사용하지 않은 함수
함수 생성
위에서와 동일하게 비교에 사용할 두 수의 곱을 계산하는 사용자 함수(multi_two_cat
)를 만들어 보겠습니다.
두 개의 입력값 x
와 y
를 받아 곱을 계산하고 res
에 저장한 뒤 cat()
함수로 결과를 출력합니다.
multi_two_cat <- function(x, y){
res <- x * y
cat(res)
}
함수 호출
위에서 생성한 multi_two_cat()
함수에 5
와 9
를 입력하여 함수의 결과를 살펴보면, 아래와 같이 45
라는 계산값이 정상 출력되는 것을 볼 수 있습니다.
multi_two_cat(5, 9)
45
변수 저장 후 출력
이번에는 결괏값을 새로운 변수 res2
에 저장한 뒤 출력해 보겠습니다.
결괏값을 res2
에 저장하는 코드를 실행하였더니 변수를 호출하지 않았는데도 45
라는 결과값이 출력되는 것을 볼 수 있습니다.
res2 <- multi_two_cat(5, 9)
45
res2
변수를 호출해 보니 NULL
이 출력되었습니다.
NULL : NULL은 변수가 초기화되지 않았을 때, 즉 값이 존재하지 않음을 의미합니다.
res2
NULL
4. 결과 비교
위 결과에서 함수를 호출하여 단순 출력했을 경우 45
로 결과값이 동일하게 출력되는 것을 볼 수 있었으나 변수 저장 후 출력 결과에서는 return()
과 cat()
사용에 따라 차이가 있는 것을 볼 수 있습니다.
return()
으로 만든 함수는 변수를 따로 출력하기 전에 값이 출력되지 않았고, cat()
으로 만든 함수는 변수에 저장해도 함수를 호출한 것처럼 바로 값이 출력됩니다. 이는 cat()
함수는 단순히 결괏값을 출력할 뿐 값을 함수 인자에 반환해주지 않기 때문입니다.
따라서 함수에서 계산된 값을 반환하여 변수에 저장하기 위해서는 return()
함수가 반드시 필요합니다.
5. 참고 링크
[1] [R] 반지름을 입력받아 원의 넓이와 둘레 구하기 (feat. pi)
[2] [R] 행렬곱 함수 직접 구현하기 (feat. For반복문)