Post

[R] 함수의 이해

[R] 함수의 이해

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

#01. 수학에서의 함수

1) 일차 방정식 f(x)

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

$f(x) = x + 5$

위의 수식에서 $x$가 5일 때 다음과 같다.

$y = f(5)$
$y = 10$

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

수학에서는 함수를 의미하는 function 을 줄여서 f 라고 표기하는 것일 뿐 함수의 이름이 반드시 f여야 하는 것은 아니다.

$hello(a) = a + 5$

위의 수식에서 a가 5일 때 다음과 같다.

$y = hello(5)$
$y = 10$

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

항목설명
$f$, $hello$함수 이름
$x$, $a$매개변수 혹은 파라미터. 함수가 동작하는데 필요한 조건값
$x + 5$, $a + 5$함수의 수식

#02. 프로그램에서의 함수

1) 함수의 정의

function 이라는 예약어를 사용하여 코드 블록을 특정 명령어에 대입하는 개념이다.

함수를 정의하는 것 만으로는 어떠한 출력 결과도 만들어 내지 않는다.

구문형식

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] "안녕 빅데이터"

#03. 함수의 파라미터

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

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)
}

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

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

1
2
3
f1(2)
f1(5)
f1(7)

💻 출력결과

1
2
3
[1] "f1(2) => 2 + 1 = 3"
[1] "f1(5) => 5 + 1 = 6"
[1] "f1(7) => 7 + 1 = 8"

2) 다중 파라미터

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

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

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)
}

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

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

1
2
3
f2(2, 1)
f2(5, 3)
f2(7, 5)

💻 출력결과

1
2
3
[1] "f2(2, 1) => 2 + 1 = 3"
[1] "f2(5, 3) => 5 + 3 = 8"
[1] "f2(7, 5) => 7 + 5 = 12"

3) 파라미터 기본값

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

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

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

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)
}

모든 파라미터를 전달하며 호출하기

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"

#04. 리턴값(반환값)

함수가 자신의 처리 결과를 되돌려 주는 처리를 리턴이라고 하고 이 때 반환되는 값을 리턴값이라고 한다.

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

함수 안에서 return(값) 명령을 사용하여 자신이 호출된 위치로 결과값을 되돌려 주는 처리.

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

함수의 처리 중단.

함수는 수행 도중 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
2
print( foo(100, 200) )
print( foo(1, 2) )

💻 출력결과

1
2
[1] 300
[1] 0
This post is licensed under CC BY 4.0 by the author.