Pendekatan Lain dalam Melakukan Iterasi
Pada tutorial ini peneliti akan memperkenalkan beberapa apply function. Apply family merupakan pendekatan lain dalam melakukan iterasi pada R, tanpa penggunaan iterasi secara eksplisit. Input yang digunakan dapat berupa list, matriks, atau vektor tergantung pada fungsi yang akan diterapkan.
Berikut contoh kode menggunakan apply():
## menghitung mean/rata-rata menggunakan apply()
(m <- matrix(c(1:16),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
apply(m, 1, mean)
## [1] 7 8 9 10
apply(m, 2, mean)
## [1] 2.5 6.5 10.5 14.5
## apply() menggunakan fungsi yang dibangun sendiri (built in function)
(m <- matrix(c(1:16),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
apply(m, 1, function(x){
max(x) - min(x)
})
## [1] 12 12 12 12
apply(m, 2, function(x){
max(x) - min(x)
})
## [1] 3 3 3 3
Berikut contoh kode menggunakan lapply():
## menghitung mean/rata-rata menggunakan lapply()
(m <- list(a=c(1:16),b=c(2:17), c=c(3:18)))
## $a
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
##
## $b
## [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
##
## $c
## [1] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
lapply(m, mean)
## $a
## [1] 8.5
##
## $b
## [1] 9.5
##
## $c
## [1] 10.5
## lapply() menggunakan fungsi yang dibangun sendiri (built in function)
(m <- data.frame(a=c(1:16),b=c(2:17), c=c(3:18)))
## a b c
## 1 1 2 3
## 2 2 3 4
## 3 3 4 5
## 4 4 5 6
## 5 5 6 7
## 6 6 7 8
## 7 7 8 9
## 8 8 9 10
## 9 9 10 11
## 10 10 11 12
## 11 11 12 13
## 12 12 13 14
## 13 13 14 15
## 14 14 15 16
## 15 15 16 17
## 16 16 17 18
lapply(m, function(x){
max(x) - min(x)
})
## $a
## [1] 15
##
## $b
## [1] 15
##
## $c
## [1] 15
Berikut contoh kode menggunakan sapply():
## menghitung mean/rata-rata menggunakan sapply()
(m <- list(a=c(1:16),b=c(2:17), c=c(3:18)))
## $a
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
##
## $b
## [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
##
## $c
## [1] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
sapply(m, mean)
## a b c
## 8.5 9.5 10.5
## sapply() menggunakan fungsi yang dibangun sendiri (built in function)
(m <- data.frame(a=c(1:16),b=c(2:17), c=c(3:18)))
## a b c
## 1 1 2 3
## 2 2 3 4
## 3 3 4 5
## 4 4 5 6
## 5 5 6 7
## 6 6 7 8
## 7 7 8 9
## 8 8 9 10
## 9 9 10 11
## 10 10 11 12
## 11 11 12 13
## 12 12 13 14
## 13 13 14 15
## 14 14 15 16
## 15 15 16 17
## 16 16 17 18
sapply(m, function(x){
max(x) - min(x)
})
## a b c
## 15 15 15
Berikut contoh kode menggunakan tapply():
## menghitung mean/rata-rata menggunakan tapply()
(m <- data.frame(kategori = c(rep("a",6),rep("b",10)), x=c(1:16)))
## kategori x
## 1 a 1
## 2 a 2
## 3 a 3
## 4 a 4
## 5 a 5
## 6 a 6
## 7 b 7
## 8 b 8
## 9 b 9
## 10 b 10
## 11 b 11
## 12 b 12
## 13 b 13
## 14 b 14
## 15 b 15
## 16 b 16
tapply(m$x, m$kategori, mean)
## a b
## 3.5 11.5
## tapply() menggunakan fungsi yang dibangun sendiri (built in function)
(m <- data.frame(kategori = c(rep("a",6),rep("b",10)), x=c(1:16)))
## kategori x
## 1 a 1
## 2 a 2
## 3 a 3
## 4 a 4
## 5 a 5
## 6 a 6
## 7 b 7
## 8 b 8
## 9 b 9
## 10 b 10
## 11 b 11
## 12 b 12
## 13 b 13
## 14 b 14
## 15 b 15
## 16 b 16
tapply(m$x, m$kategori, function(x){
max(x) - min(x)
})
## a b
## 5 9
## penggunaan tapply pada data iris
data(iris)
tapply(iris$Sepal.Width, iris$Species, median)
## setosa versicolor virginica
## 3.4 2.8 3.0
Berikut contoh kode menggunakan mapply():
## melakukan replikasi dengan function rep dan parameter 1:5 dan 5:1
mapply(rep, 1:5, 5:1)
## [[1]]
## [1] 1 1 1 1 1
##
## [[2]]
## [1] 2 2 2 2
##
## [[3]]
## [1] 3 3 3
##
## [[4]]
## [1] 4 4
##
## [[5]]
## [1] 5
## membangkitkan data normal dengan parameter n=10, mean=1:10 (akan terdapat 10 vector hasil bangkitan data), dan sd=1
mapply(rnorm, 10, 1:10,1)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,] 1.1961534 1.6963406 4.618645 5.894743 4.088241 5.123598 8.439863
## [2,] 0.2034527 2.4581106 2.757911 3.651548 5.213394 6.680082 5.841827
## [3,] 1.9367635 3.1685228 1.256372 4.169594 5.018695 5.595676 7.376801
## [4,] -0.1249677 1.6263854 4.937293 3.993845 5.325881 7.719854 6.283067
## [5,] -1.5827068 1.5817049 1.952537 3.985288 4.356716 5.621032 7.272257
## [6,] 0.3903382 2.9709813 2.523636 4.785467 5.636022 6.748849 7.414321
## [7,] 2.5242723 0.7092695 3.661254 4.721182 2.768179 7.028718 6.620018
## [8,] 2.2562072 0.9032846 4.256179 5.376143 4.381613 6.161341 8.711199
## [9,] 0.8873105 2.7528810 1.769038 5.531389 4.709071 5.336936 7.708637
## [10,] 1.0803291 1.3756866 1.437023 3.576786 4.845625 5.170002 8.644710
## [,8] [,9] [,10]
## [1,] 8.694773 8.025237 9.765629
## [2,] 9.470110 8.319267 9.603610
## [3,] 9.366401 10.052400 10.217895
## [4,] 9.632396 8.601097 7.996568
## [5,] 7.772885 9.793937 11.502172
## [6,] 9.082353 8.854803 10.344512
## [7,] 8.582900 8.723166 10.586858
## [8,] 9.151719 10.342774 11.384282
## [9,] 6.793905 8.238479 10.151236
## [10,] 7.834430 9.631307 9.182497