목차
- 함수 생성(= 정의)
- 함수 호출
- 독립변수(= 인수) / 매개변수
- 독립변수 개수
- 기본 매개변수 값
- 값 반환 - return() 함수
- 안긴함수 (= 중첩함수)
- 재귀함수
- 전역변수 / 지역변수
- 전역할당연산자
- 함수는 호출될 때만 실행되는 코드 블록임.
- 매개변수 통해서 함수에 데이터 전달 가능.
- 함수는 실행 결과로 데이터를 반환 가능.
함수 생성(= 정의)
func_name function() {
# 실행코드
}
[예제] - hz라는 이름을 갖는 함수 생성.
hz <- function() {
print("Homzzang.com")
}
함수 호출
func_name() 형태로 함수 호출.
[예제]
hz <- function() {
print("Homzzang.com")
}
hz()
독립변수(= 인수) / 매개변수
[정의]
독립변수 (argument)
함수로 전달되는 데이터 의미. (예) HTML, CSS, JS
매개변수 (parameter)
독립변수 받기 위해 함수에 정의한 자리. (예) lang
[예제]
homzzang <- function(lang) {
paste(lang, "강의")
}
homzzang("HTML") # [1] "HTML 강의"
homzzang("CSS") # [1] "CSS 강의"
homzzang("JS") # [1] "JS 강의"
독립변수 개수
기본적으로 매개변수 개수와 독립변수 개수는 일치해야 함.
만약, 개수 다르면 에러 발생함.
[예제1] (매개변수 개수 == 독립변수 개수) ∴ 에러 발생 X
hz <- function(site, host) {
paste(site, host)
}
hz("홈짱닷컴", "Homzzang.com") # [1] "홈짱닷컴 Homzzang.com"
[예제2] - (매개변수 개수 != 독립변수 개수) ∴ 에러 발생 O
hz <- function(site, host) {
paste(site, host)
}
hz("홈짱닷컴") # 에러 발생
기본 매개변수 값
기본적으로 매개변수 개수와 독립변수 개수는 같아야 하나,
매개변수 기본값이 정의된 경우엔 다를 수도 있음.
[예제1] - 1번째 매개변수에 기본값 설정된 경우
hz <- function(site="홈짱닷컴", host) {
paste(site, host)
}
hz(,"Homzzang.com") # [1] "홈짱닷컴 Homzzang.com"
PS. 호출 시, 빨간색 쉼표( , ) 빼먹지 않도록 주의.
[예제2] - 2번째 매개변수에 기본값 설정된 경우
hz <- function(site, host="Homzzang.com") {
paste(site, host)
}
hz("홈짱닷컴") # [1] "홈짱닷컴 Homzzang.com"
[예제3] - 모든 매개변수에 기본값이 설정된 경우
hz <- function(site="홈짱닷컴", host="Homzzang.com") {
paste(site, host)
}
hz() # [1] "홈짱닷컴 Homzzang.com"
PS. 독립변수 없으면, 매개변수 기본값들이 출력됨.
값 반환 - return() 함수
return() 함수 사용하면, 출력은 안 시키고 함수 결과값만 반환 가능.
[예제]
homzzang <- function(x) {
return (5 * x)
}
print(homzzang(1)) # [1] 5
print(homzzang(2)) # [1] 10
print(homzzang(3)) # [1] 15
[주의] R 언어는 값만으로 출력 가능해서, print() 함수 없이도 출력 가능.
안긴함수 (= 중첩함수)
※ 2가지 방법 가능.
[방법1] - 다른 함수 안에서 함수 호출
hz <- function(x, y) {
a <- x + y
return(a)
}
hz(hz(1, 1), hz(2, 2)) # [1] 6
PS. 해설.
- hz(1, 1) 결과값 2가 바깥함수의 x 매개변수로 전달됨.
- hz(2, 2) 결과값 4가 바깥함수의 y 매개변수로 전달됨.
방법2 - 다른 함수 안에 함수 작성
hz_out <- function(x) {
hz_in <- function(y) {
a <- x + y
return(a)
}
return (hz_in)
}
output <- hz_out(3)
output(4) # [1] 7
PS. 해설
- hz_in() 함수가 안에 있어서 직접 호출 불가.
- 따라서, hz_out() 함수를 먼저 호출해야 함.
- output 변수 생성 후, 독립변수 3을 전달함.
- 그 다음에 y로 독립변수 4 전달해 7이 나옴.
재귀함수
함수 자신을 함수 안에서 호출하는 경우에 해당.
[예제]
hz <- function(k) {
if (k > 0) {
result <- k + hz(k - 1)
print(result)
} else {
result = 0
return(result)
}
}
hz(3)
결과값:
[1] 1
[1] 3
[1] 6
PS1. 재귀함수 작동원리
hz(3) = 3 + hz(2)
hz(2) = 2 + hz(1)
hz(1) = 1 + hz(0) = 1
hz(2) = 2 + 1 = 3
hz(3) = 3 + 3 = 6
PS2. 재귀함수 사용 시, 주의사항
- 무한반복 안 되도록 주의.
- 과도한 메모리/CPU점유율 안 차지하도록 주의.
∴ 충분히 테스트 후 적용 권장.
PS. Java 언어의 재귀함수 강의 참고.
전역변수 / 지역변수
[정의]
전역변수
- 함수 밖에서 선언된 변수를 의미.
- 함수 밖과 안에서 모두 접근 가능.
- 동일명의 지역변수 있어도 변수명과 값을 유지.
지역변수
- 함수 안에서 선언된 변수를 의미.
- 함수 안에서만 유효. (즉, 함수 밖에선 사용 불가.)
[예제1] - 전역변수
host <- "Homzzang.com"
hz <- function() {
paste("홈짱닷컴", host)
}
hz() # [1] "홈짱닷컴 Homzzang.com"
[예제2] - 지역변수
host <- "Homzzang.com"
hz <- function() {
host = "homzzang.com"
paste("홈짱닷컴", host)
}
hz() # [1] "홈짱닷컴 homzzang.com"
host # Homzzang.com
전역할당연산자
일반적으로 함수 안에서 선언된 변수는 지역변수라서 함수 안에서만 유효.
하지만, 함수 안에서도 전역할당연산자 <<- 이용해 전역변수 생성 가능.
※ 전역할당연산자 사용하면 함수 안에서 전역변수 변경도 가능. (예제2)
[예제1] - 함수 안에서 전역변수 선언하기
hz <- function() {
host <<- "Homzzang.com"
paste("홈짱닷컴", host)
}
hz() # [1] "홈짱닷컴 Homzzang.com"
print(host) # [1] "Homzzang.com"
[예제2] - 함수 안 전역변수로 함수 밖 전역변수 변경 가능
host <- "homzzang.com"
hz <- function() {
host <<- "Homzzang.com"
paste("홈짱닷컴", host)
}
hz() # [1] "홈짱닷컴 Homzzang.com"
paste("홈장닷컴", host) # [1] "홈장닷컴 Homzzang.com"
최신댓글