8 minute read

Selama bekerja dengan R, saya seringkali mengalami hal ini:

“Eh, kayanya saya pernah bikin fungsi cleaning data buat kasus ini di project bulan lalu deh.”

ATAU

“Eh, kayanya saya pernah bikin fungsi plot grafik untuk data mirip seperti ini di project minggu lalu deh.”

Akibatnya, saya harus selalu melakukan ritual berikut ini:

  1. Buka folder project lama.
  2. Buka satu per satu file .R atau .qmd sampai ketemu script-nya.
  3. Copy fungsinya.
  4. Paste ke script baru.

Kalau hanya sekali atau dua kali mungkin tidak masalah tapi kalau hal ini berkali-kali terjadi, lumayan juga effort-nya. Belum lagi kalau saya update fungsinya di satu tempat, script lain yang menggunakan fungsi itu jadi lupa untuk ter-update.

Nah, sebagai pengguna R, solusi paling elegan untuk masalah ini adalah: Membungkus fungsi-fungsi andalan kita menjadi sebuah R libraries.

Hal ini mungkin terdengar intimidating karena terbayang proses yang rumit. Padahal membuat R library untuk pemakaian pribadi (atau tim kantor) itu tidak serumit yang dibayangkan. Kali ini saya akan share cara membungkus fungsi-fungsi yang sering saya pakai menjadi library(ikanx101).

Tahap I: Persiapan yang Dibutuhkan

Untuk membuat R library, saat ini kita tidak perlu meng-coding struktur folder secara manual. Komunitas R sudah menyediakan tools yang sangat memanjakan kita. Pastikan kalian sudah install dua libraries ini:

install.packages("devtools")
install.packages("usethis")
  • devtools: Untuk build dan install library kita.
  • usethis: Untuk otomatisasi pembuatan struktur folder dan file (ini game changer-nya).

Tahap 2: Inisiasi Project

Buka R Studio, lalu jalankan perintah ini di console. Ganti path-nya sesuai keinginan kalian.

# Membuat struktur dasar package
usethis::create_package("~/Documents/ikanx101")

Setelah di-run, R Studio akan otomatis membuka sesi R baru yang berisi project package kita. Di tab Files, teman-teman akan melihat struktur folder standar R Package (R/, DESCRIPTION, NAMESPACE, dll). Jangan pusing dulu, biarkan usethis yang mengurus ini.

Tahap 3: Masukkan Fungsi Andalan

Sekarang saatnya memasukkan fungsi ke dalam folder library kita. Misalnya, saya sering bikin plot dengan ggplot2, tapi malas mengetik theme_minimal() + theme(legend.position = "bottom") + labs(caption = "Dibuat dengan R\nikanx101.com") berulang-ulang. Oleh karena itu, Saya akan buat theme sendiri.

Jalankan perintah ini di console:

usethis::use_r("tema_plot")

File baru bernama tema_plot.R akan muncul di folder R/. Di file inilah kita tulis fungsinya.

#' Tema Plot ala Ikanx
#'
#' Fungsi ini adalah shortcut untuk theme_minimal dengan modifikasi font dan legenda.
#'
#' @return ggplot theme object
#' @export
#' @examples
#' \dontrun{
#' ggplot(mtcars, aes(mpg, wt)) + geom_point() + theme_ikanx()
#' }
theme_ikanx <- function() {
  ggplot2::theme_minimal() +
  ggplot2::labs(caption = "Dibuat dengan R\nikanx101.com")
  ggplot2::theme(
    legend.position = "bottom",
    plot.title = ggplot2::element_text(face = "bold", size = 14),
    axis.text = ggplot2::element_text(color = "grey20")
  )
}

Perhatikan komentar dengan tanda #' di atas fungsi. Itu adalah roxygen skeleton. Bagian ini yang nanti akan disulap jadi dokumentasi (Help page) saat kita ketik ?theme_ikanx.

Kemudian tag @export akan berguna untuk memberi tahu R bahwa fungsi ini boleh dipakai oleh user. Kalau tidak ada @export, fungsinya akan jadi internal function (tersembunyi).

Tahap 4: Dokumentasi dan Build

Ini bagian magisnya. Kita tidak perlu menulis file dokumentasi manual. Cukup jalankan:

devtools::document()

Perintah ini akan membaca komentar #' tadi dan membuat file dokumentasi .Rd secara otomatis.

Terakhir, kita install library-nya ke laptop kita:

devtools::install()

Tunggu sebentar sampai proses selesai kemudian restart R session!

Tahap 5: Uji Coba

Sekarang, coba panggil library buatan sendiri tadi selayaknya kita memanggil tidyverse.

Ini adalah grafik standar sebelum memanggil library(ikanx101).

library(ggplot2)
library(ikanx101) # Ini dia package kita!

# Coba bikin plot awal
ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
  geom_point()
  

Sedangkan ini adalah hasil plot dengan theme dari library(ikanx101):

# Coba bikin plot
ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
  geom_point() +
  theme_ikanx() + # Memakai fungsi dari package sendiri
  labs(title = "Tes Plot dengan Library Ikanx101")

Setiap kali saya butuh theme ini, saya tidak perlu copy-paste kode panjang lagi dan cukup memanggil library(ikanx101).

Tips Tambahan: Simpan di GitHub

Kalau dibutuhkan, kita bisa menyimpan library buatan kita ini di Github agar orang lain bisa meng-install-nya juga. Ini adalah cara yang termudah daripada mempublikasikannya di CRAN.

Caranya adalah:

devtools::install_github("username_github/nama_repo")

Kesimpulan

Membuat R library sendiri bukan soal gagah-gagahan biar terlihat jago coding tapi ini soal efisiensi dan reproducibility. Mulailah dari fungsi-fungsi kecil yang sering dipakai seperti:

  • Fungsi cleaning seperti format mata uang (Rp).
  • Fungsi membuat tabulasi dari data frame.
  • Fungsi palet warna favorit di ggplot2.

if you find this article helpful, support this blog by clicking the ads.