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( )을 호출해주므로 각 행의 첫 번째 컬럼끼리 묶어 평균을 구하고, 다시 두 번째 컬럼끼리 묶어 평균을 구하는 작업을 반복하게 된다. 그 결과 모든 컬럼의 평균이 계산된다.