목차
함수 생성(= 정의)
함수 호출
독립변수(= 인수) / 매개변수
독립변수 개수
기본 매개변수 값
값 반환 - 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"
주소 복사
랜덤 이동
최신댓글