Membuat Fungsi Sendiri

Ketika Anda membuat sebuah script yang akan digunakan berkali-kali namun dengan nilai input yang berbeda-beda, maka ada baiknya script tersebut dibuat menjadi sebuah fungsi atau function sesuai dengan kebutuhan Anda atau User-Defined Function. Untuk membuat function di R Anda dapat menggunakan fungsi function(). Misalnya Anda mempunyai script seperti berikut.

a <- 5
b <- 7
d <- a + b
d
## [1] 12

Kemudian ketika Anda ingin menggunakan nilai lain untuk a namun dengan nilai b yang sama, misalnya a <- 2, Anda perlu menjalankan perintah seperti berikut.

a <- 2
d <- a + b
d
## [1] 9

Jika script di atas dibuat sebuah fungsi, misalnya dengan nama fungsi sum_ab, maka Anda dapat membuatnya seperti berikut ini. Fungsi tersebut memiliki 2 buah parameter atau argumen, yaitu a dan b berupa nilai numerik. Argumen a dan b harus diisi ketika memanggil fungsi tersebut. Fungsi return() di dalam fungsi sum_ab() menentukan nilai yang akan dijadikan keluaran (output) dari fungsi sum_ab().

sum_ab <- function(a, b){
  d <- a + b
  return(d)
}

Selanjutnya panggil fungsi tersebut dengan argumen yang diperlukan.

sum_ab(a = 5, b = 7)
## [1] 12

Merubah nilai a <- 2 dapat dilakukan dengan lebih mudah.

sum_ab(a = 2, b = 7)
## [1] 9

Bagaimana jika tidak ada argumen yang diberikan ketika memanggil fungsi tersebut? Dalam hal ini akan terjadi errorError yang terjadi karena argumen pada fungsi ini adalah tipe argumen yang harus diisi atau tidak mempunyai nilai default.

Apa itu nilai default argumen pada sebuah fungsi? Kita akan sedikit memodifikasi fungsi sum_ab() yang sudah dibuat sebelumnya.

sum_ab()

## Error in sum_ab() : argument "a" is missing, with no default

sum_ab <- function(a = 1, b = 1){
  d <- a + b
  return(d)
}

Fungsi sum_ab() sekarang memiliki nilai default untuk setiap argumennya. Argumen a memiliki nilai 1 dan b juga 1. Ketika Anda panggil fungsi sum_ab() tanpa menuliskan nilai untuk argumennya maka secara default nilai-nilai tersebut yang akan digunakan.

sum_ab()
## [1] 2
sum_ab(a = 5, b = 3)
## [1] 8