쭈쌤
쭈쌤 Hello World

[R] 함수

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[R] 함수≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

[R] 함수

함수란 자주 사용되는 명령어들을 그룹화해서 생성한 재사용 가능 단위를 의미합니다. 어릴적 공부한 수학의 함수도 같은 의미로 이해할 수 있습니다.

수학에서의 함수

일반적인 수학 식에서는 함수의 이름을 f로 지정한다.

1
2
f(x) = x + 5
f(1) ---> 6

함수의 이름을 hello라고 지정한 경우

1
2
hello(a) = a + 1
hello(10) ---> 11
  • f, hello : 함수 이름.
  • x, a : 매개변수 혹은 파라미터. 함수가 동작하는데 필요한 조건값
  • x + 1, a + 5 : 함수의 수식

즉, f라는 키워드나 hello라는 명령어로 설정된 수식을 재사용할 수 있다.

#01. 함수의 사용

1) 함수의 정의

구문형식

1
2
3
이름 <- function() {
        ... 명령어 ...
}

두 개의 메시지를 출력하는 함수 정의하기

1
2
3
4
say_hello <- function() {
    print("Hello BigData")
    print("안녕 빅데이터")
}

2) 준비된 함수 사용하기

함수의 이름을 명령어처럼 사용한다. 이를 “함수를 호출한다”고 한다.

1
2
say_hello()
say_hello()
▶ 출력결과
1
2
3
4
[1] "Hello BigData"
[1] "안녕 빅데이터"
[1] "Hello BigData"
[1] "안녕 빅데이터"

#02. 함수의 파라미터

함수를 정의할 때 () 안에 명시되는 조건값.

1) 파라미터를 갖는 함수 정의하기

function 키워드 뒤의 괄호안에 필요한 조건값을 명시한다.

1
2
3
4
5
6
f1 <-function(x) {
    y <- x + 1
    tpl <- "f1(%d) => %d + 1 = %d"
    result <- sprintf(tpl, x, x, y)
    print(result)
}

2) 파라미터를 포함한 함수의 호출

파라미터가 정의된 함수는 호출할 때 반드시 해당 값을 전달해야만 한다.

1
f1(2)
▶ 출력결과
1
[1] "f1(2) => 2 + 1 = 3"
1
f1(5)
▶ 출력결과
1
[1] "f1(5) => 5 + 1 = 6"
1
f1(7)
▶ 출력결과
1
[1] "f1(7) => 7 + 1 = 8"

#03. 다중 파라미터

1) 다중 파라미터를 갖는 함수 정의하기

함수가 정해진 동작을 수행하는데 필요한 조건값이 두 개 이상인 경우 콤마(,) 로 구분하여 정의한다.

1
2
3
4
5
6
f2 <-function(x, y) {
    z <- x + y
    tpl <- "f2(%d, %d) => %d + %d = %d"
    result <- sprintf(tpl, x, y, x, y, z)
    print(result)
}

2) 다중 파라미터를 포함한 함수의 호출

다중 파라미터를 갖는 함수를 호출할 때는 콤마로 구분하여 조건값들을 전달할 수 있다.

1
f2(2, 1)
▶ 출력결과
1
[1] "f2(2, 1) => 2 + 1 = 3"
1
f2(5, 3)
▶ 출력결과
1
[1] "f2(5, 3) => 5 + 3 = 8"
1
f2(7, 5)
▶ 출력결과
1
[1] "f2(7, 5) => 7 + 5 = 12"

#04. 파라미터에 기본값 설정하기

함수를 정의하면서 마지막 파라미터부터 순차적으로 기본값을 정의할 수 있다.

기본값이 정의된 함수는 호출시에 해당 값을 생략 할 수 있다.

1) 기본값을 갖는 파라미터를 포함하는 함수 정의

1
2
3
4
5
6
my_sum <- function(x, y, z=0) {
    k <- x + y + z
    tpl = "sum(%d, %d, %d) ->  + %d + %d + %d = %d"
    result <- sprintf(tpl, x, y, z, x, y, z, k)
    print(result)
}

2) 호출하기

모든 파라미터를 전달한 경우

1
my_sum(3, 6, 9)
▶ 출력결과
1
[1] "sum(3, 6, 9) ->  + 3 + 6 + 9 = 18"

기본값이 정의된 파라미터를 생략한 경우

1
my_sum(100, 200)
▶ 출력결과
1
[1] "sum(100, 200, 0) ->  + 100 + 200 + 0 = 300"

#05. 리턴(반환)

함수 안에서 return 키워드를 사용하여 자신이 호출된 위치로 결과값을 되돌려 주는 처리.

1) 결과값을 리턴(반환)하는 함수 정의하기

1
2
3
4
5
my_plus <- function(x, y) {
    z = x + y
    # 자신이 호출된 위치로 값을 되돌려준다.
    return(z)
}

2) 함수의 결과값 리턴받기

리턴받은 값을 다른 변수에 대입

1
2
a <- my_plus(10, 20)
print(a)
▶ 출력결과
1
[1] 30

리턴값을 바로 출력하기

함수가 중첩되어 사용되는 경우 가장 안쪽의 함수가 먼저 실행된다.

1
print( my_plus(100, 200) )   # print(300)
▶ 출력결과
1
[1] 300

3) 함수의 처리 중단.

  • 함수는 수행 도중 return을 만나면 그 즉시 수행을 중단한다.
  • 주로 특정 조건이 충족되었을 때 함수의 실행을 중단하기 위해 사용되는 기법.
1
2
3
4
5
6
7
8
foo <- function(x, y) {
    if ( x < 10 || y < 10) {
        return(0)
    }

    z <- x + y
    return(z)
}
1
print( foo(100, 200) )
▶ 출력결과
1
[1] 300
1
print( foo(1, 2) )
▶ 출력결과
1
[1] 0
Rating:

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[R] 함수≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

comments powered by Disqus