Fungsi yang tersedia di R
Paket dasar R
memiliki banyak fungsi yang dapat digunakan. Operasi matematika sederhana, misalnya, dapat dengan mudah dijalankan di R
. Sebuah fungsi terdiri atas satu atau beberapa argumen. Bagaimana mengetahui penjelasan sebuah fungsi dapat menggunakan bantuan, misalnya fungsi untuk penjumlahan:
?'+'
Fungsi +
digunakan untuk menjumlahkan dua vektor numerik.
'+'(1,1)
## [1] 2
class(`+`)
## [1] "function"
(a <- seq(1,10, by = 2))
## [1] 1 3 5 7 9
(b <- seq(2, 100, length.out = 5))
## [1] 2.0 26.5 51.0 75.5 100.0
'+'(a,b)
## [1] 3.0 29.5 56.0 82.5 109.0
Pada kasus ini operasi penjumlahan dapat pula ditulis:
1+1
## [1] 2
a+b
## [1] 3.0 29.5 56.0 82.5 109.0
Membuat fungsi sederhana sendiri
Penghitungan ragam sebuah vektor numerik dapat menggunakan fungsi yang tersedia di R
yaitu var
. Misalnya, ragam untuk vektor b
adalah
var(b)
## [1] 1500.625
Ragam juga dapat dicari dengan menggunakan fungsi yang dibuat sendiri. Rumus untuk ragam adalah \[\begin{equation} s^2 = \frac{1}{n} \sum_{i=1}^n (x_i - \bar{x})^2, \end{equation}\] sehingga fungsi buatan sediri dapat berupa:
ragam <- function(x) { #ragam adalah nama fungsi buatan, dan x adalah argumen
n <- length(x) # cari nilai n dari vektor x
rataan <- mean(x) # cari nilai rataan dari vektor x
jk <- sum((x - rataan)^2) #cari jumlah kuadrat
hasil <- jk/(n-1) #cari ragam berdasarkan rumus
return(hasil)
}
Satu baris fungsi juga dapat dibuat, misalnya:
ragam2 <- function(x) {
sum((x - mean(x))^2)/(length(x)-1)
}
class(ragam)
## [1] "function"
class(ragam2)
## [1] "function"
Kedua fungsi ini kemudian dapat digunakan untuk mencari ragam dari vektor b dengan hasil yang sama.
ragam(b)
## [1] 1500.625
ragam2(b)
## [1] 1500.625
Penulis lebih menyukai cara pertama yang terdiri atas beberapa baris karena pengguna lain dapat membaca kode dengan lebih baik. Cara pertama juga mempunyai nilai return
yang sangat disarankan saat membuat sebuah fungsi. argument
sebuah fungsi dapat diberi nilai default
, artinya jika pengguna tidak memasukkan nilai pada argument
, fungsi akan mengeluarkan hasil default
-nya. Misalnya, numerik vektor dari 1 sampai 10 sebagai nilai default
maka jika pada argument
tidak diberi nilai, fungsi akan mencari nilai ragam dari numerik vektor 1 sampai 10.
ragam3 <- function(x = c(1:10)) {
sum((x - mean(x))^2)/(length(x)-1)
}
ragam3(b)
## [1] 1500.625
ragam3()
## [1] 9.166667
ragam3(1:10)
## [1] 9.166667
Jika tidak ada nilai default
seperti pada fungsi ragam2
, maka tanpa memberikan nilai pada argument
hasilnya adalah error.
ragam2()
Error in ragam2() : argument "x" is missing, with no default
Fungsi dengan beberapa argument
juga dapat dibuat. Beberapa argument
ini dapat berupa (1) diberi nilai default
semua, (2) tidak diberi nilai default
semua, atau (3) dicampur. Kebutuhan perlu atau tidaknya memberikan nilai default
pada argument
, tergantung dari si pembuat fungsi. Jika dengan nilai default
membantu pengguna, maka si pembuat fungsi sebaiknya menggunakan nilai default
pada argument
dan sebaliknya.
Fungsi pada sebuah paket
Contoh pembuatan fungsi ragam
diatas adalah contoh sederhana yang tidak perlu dilakukan karena R
memiliki fungsi var
untuk menghitung ragam. Lalu, kapan kita membutuhkan fungsi yang dibuat sendiri? Jawabannya adalah saat orang lain belum ada yang membuatnya atau setelah mencari fungsi tersebut dan tidak ditemukan.
Saat ingin mencari sebuah fungsi untuk menganalisis data, mesin pencari, misalnya google
, dapat digunakan apakah fungsi tersebut sudah tersedia di paket tertentu atau sudah pernah ada yang membuat. Stack overflow (so) juga dapat digunakan sebagai sumber untuk mencari informasi/ bertanya.
Berikut contoh perhitungan jarak antar obyek dengan menggunakan jarak binary, yaitu fungsi dist
dari paket dasar R
. Jika ingin menghitung jarak simple matching, paket dasar tidak menyediakan fungsi ini, sehingga perlu menggunakan paket tambahan. Misalnya, paket kmed
yang menyediakan fungsi matching
untuk menghitung jarak simple matching. Berikut contoh penggunaan fungsi dist
dan matching
dari paket kmed
untuk menghitung jarak dari 5 obyek dengan variabel binary.
dt <- iris[1:5,1:2]
dt[,1] <- dt[,1] < 5
dt[,2] <- dt[,2] < 3.1
colnames(dt) <- c("x", "y")
dt ##data dengan 5 obyek yang memiliki 2 variabel binary
## x y
## 1 FALSE FALSE
## 2 TRUE TRUE
## 3 TRUE FALSE
## 4 TRUE FALSE
## 5 FALSE FALSE
(bindist <- dist(dt, method = "binary", diag = TRUE, upper = TRUE)) #jarak binary dari paket dasar
## 1 2 3 4 5
## 1 0.0 1.0 1.0 1.0 0.0
## 2 1.0 0.0 0.5 0.5 1.0
## 3 1.0 0.5 0.0 0.0 1.0
## 4 1.0 0.5 0.0 0.0 1.0
## 5 0.0 1.0 1.0 1.0 0.0
(matchdist <- kmed::matching(dt,dt)) #jarak simple matching dari paket kmed
## 1 2 3 4 5
## 1 0.0 1.0 0.5 0.5 0.0
## 2 1.0 0.0 0.5 0.5 1.0
## 3 0.5 0.5 0.0 0.0 0.5
## 4 0.5 0.5 0.0 0.0 0.5
## 5 0.0 1.0 0.5 0.5 0.0
Perhatikan bahwa kmed::matching
digunakan untuk menggunakan fungsi matching
dari paket kmed
. Praktek menggunakan ::
sangat disarankan saat pengguna menggunakan banyak library
karena nama fungsi yang sama dapat ditemukan pada dua paket yang berbeda, sehingga penulisan namapaket::fungsi
lebih baik dan aman dari kesalahan mengambil sebuah fungsi. Jika saat kmed::matching(dt,dt))
dijalankan yang muncul adalah Error in loadNamespace(name) : there is no package called ‘kmed’, maka paket kmed
perlu diinstal dulu dengan menggunakan install.packages("kmed")
.