갈루아의 반서재

apply 함수는 plyr 패키지가 커버한다. 

1. apply
apply(array, margin, function) - 행렬의 행이나 열단위로 해당 함수를 적용하고자 할 때 사용함
여기서 margin 값이 1이면 행을, 2는 열을 나타낸다.

> matrix(seq(1,16), 4, 4)
     [,1] [,2] [,3] [,4]
[1,]    1    5    9   13
[2,]    2    6   10   14
[3,]    3    7   11   15
[4,]    4    8   12   16
> M <- matrix(seq(1,16), 4, 4)
> apply(M, 1, min)  // 각각의 행에서 최소값 리턴
[1] 1 2 3 4
> apply(M, 1, max) // 각각의 행에서 최대값 리턴
[1] 13 14 15 16
> apply(M, 2, max) // 각각의 열에서 최대값 리턴
[1]  4  8 12 16

> array( seq(32), dim = c(4,4,2))
, , 1

     [,1] [,2] [,3] [,4]
[1,]    1    5    9   13
[2,]    2    6   10   14
[3,]    3    7   11   15
[4,]    4    8   12   16

, , 2

     [,1] [,2] [,3] [,4]
[1,]   17   21   25   29
[2,]   18   22   26   30
[3,]   19   23   27   31
[4,]   20   24   28   32

> M <- array( seq(32), dim = c(4,4,2))
> apply(M, 1, sum) // 각각의 행의 합계
[1] 120 128 136 144
> apply(M, c(1,2), sum) // 행렬 1, 2의 각각의 원소의 합
     [,1] [,2] [,3] [,4]
[1,]   18   26   34   42
[2,]   20   28   36   44
[3,]   22   30   38   46
[4,]   24   32   40   48

2. lappy
lapply 리스트내의 각각의 원소에 대해 함수를 적용할 때 사용, 리스트로 결과 반환

> list(a = 1, b = 1:3, c = 10:100) 
$a
[1] 1

$b
[1] 1 2 3

$c
 [1]  10  11  12  13  14  15  16  17  18  19  20  21  22
[14]  23  24  25  26  27  28  29  30  31  32  33  34  35
[27]  36  37  38  39  40  41  42  43  44  45  46  47  48
[40]  49  50  51  52  53  54  55  56  57  58  59  60  61
[53]  62  63  64  65  66  67  68  69  70  71  72  73  74
[66]  75  76  77  78  79  80  81  82  83  84  85  86  87
[79]  88  89  90  91  92  93  94  95  96  97  98  99 100

> x <- list(a = 1, b = 1:3, c = 10:100) 

> lapply(x, FUN = length)
$a
[1] 1

$b
[1] 3

$c
[1] 91

> lapply(x, FUN = sum)
$a
[1] 1

$b
[1] 6

$c
[1] 5005

3. sapply
리스트내의 각각의 원소에 대해 함수 적용, 결과는 벡터로 받음

>   x <- list(a = 1, b = 1:3, c = 10:100) 
> sapply(x, FUN = length)  // 위의 2. lapply 와 비교해보자. 벡터로 결과를 나타냄을 알 수 있다
 a  b  c 
 1  3 91 
> sapply(x, FUN = sum)   
   a    b    c 
   1    6 5005