728x90
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 c1 3 91> sapply(x, FUN = sum)a b c1 6 5005>
728x90
'프로그래밍 Programming' 카테고리의 다른 글
lower.tri / upper.tri (0) | 2014.12.05 |
---|---|
Correlation : cor() (0) | 2014.12.05 |
Data Preparation (9) - Clean (Deal with Missing Values) (0) | 2014.11.29 |
Data Preparation (8) - Clean (Ignore MultiLevel, Constants) (0) | 2014.11.29 |
Data Preparation (7) - Clean (Ignore IDs, Outputs, Missing) (0) | 2014.11.29 |