더북(TheBook)

mapply( )를 사용해 rnorm( )을 호출하는 방법에 대해서 알아보자. rnorm()은 n, mean, sd 세 인자를 받는 함수다. 예를 들어, 다음은 평균 0, 표준 편차 1을 따르는 난수 10개를 발생시킨다.

> rnorm(10, 0, 1)
[1] -0.1537857 0.9516890 -0.6393049 0.0864833 0.1735838 -2.5103284
[7] 1.6078990 0.3964567 1.3365991 0.4620919

rnorm( )을 다음 세 가지 조합에 대해 호출할 필요가 있다고 해보자.

n

mean

sd

1

0

1

2

10

1

3

100

1

이를 수행하기 위해 rnorm( )을 세 번 호출해도 되지만 또 다른 방법은 mapply( )를 활용하는 것이다. mapply( )는 인자로 주어진 데이터들의 첫 번째 요소들을 묶어서 FUN을 호출하고, 두 번째 인자들을 묶어 FUN을 호출하는 식으로 동작한다. 따라서 다음과 같이 mapply( )를 사용할 수 있다.

> mapply(rnorm,
+        c(1, 2, 3),     # n
+        c(0, 10, 100),  # mean
+        c(1, 1, 1))     # sd
[[1]]
[1] -0.1700506

[[2]]
[1] 8.321710 7.564312

[[3]]
[1] 99.45474 100.10412 100.80828

위 실행 결과에서 [[1]]은 rnorm(n=1, mean=0, sd=1), [[2]]는 rnorm(n=2, mean=10, sd=1), [[3]]은 rnorm(n=3, mean=100, sd=1)에 해당한다.

또 다른 예로 아이리스의 각 컬럼의 평균을 구하는 경우를 살펴보자.

> mapply(mean, iris[, 1:4])
Sepal.Length Sepal.Width Petal.Length Petal.Width
    5.843333    3.057333     3.758000    1.199333

mapply( )의 인자로 iris[, 1:4]가 주어졌다. 따라서 mapply( )에는 iris의 모든 행이 나열되어 인자로 주어졌다고 볼 수 있다. mapply( )가 주어진 인자들을 하나씩 묶어 mean( )을 호출해주므로 각 행의 첫 번째 컬럼끼리 묶어 평균을 구하고, 다시 두 번째 컬럼끼리 묶어 평균을 구하는 작업을 반복하게 된다. 그 결과 모든 컬럼의 평균이 계산된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.