Apa Itu Package
Package adalah kumpulan fungsi, dokumentasi, dan terkadang data yang memperluas kemampuan R. R dasar memberimu vector, model, dan plot; package memberimu semua hal lainnya, dan "semua hal lainnya" itu sangat banyak. CRAN (Comprehensive R Archive Network) menampung sekitar 20.000 package, dan setiap package diperiksa dengan uji pengajuan CRAN sebelum diterbitkan. Repositori itulah alasan utama R tetap kompetitif untuk pekerjaan data: apa pun analisisnya, kemungkinan besar seseorang sudah membuat package-nya.
CRAN bukan satu-satunya sumber. Bioconductor menampung ekosistem bioinformatika, dan banyak package yang masih dikembangkan ada di GitHub (bisa diinstal dengan remotes::install_github()). Tetapi sebagai pemula, kamu bisa menganggap CRAN sebagai default, dan sumber lain sebagai sesuatu yang akan kamu temui ketika sebuah README memintanya.
Beberapa package ikut terpasang bersama R itu sendiri (stats, utils, graphics, dan kawan-kawannya) dan dimuat otomatis, itulah sebabnya mean() dan plot() langsung bisa dipakai. Semua package lain mengikuti ritual dua langkah di bawah ini.
install.packages() Sekali, library() Setiap Sesi
Ini kebingungan nomor satu bagi pemula, jadi berikut penjelasannya sejelas mungkin. Membuat sebuah package bisa dipakai adalah dua tindakan berbeda dengan dua masa berlaku yang berbeda:
install.packages("dplyr") # ONCE per machine: downloads from CRAN and installs
library(dplyr) # EVERY session: loads it so your code can use it
install.packages("dplyr")itu seperti membeli buku: kamu melakukannya sekali, dan buku itu tetap ada di rakmu (disk-mu) sejak saat itu. Perhatikan tanda kutipnya: kamu memberikan namanya sebagai string.library(dplyr)itu seperti mengambil buku dari rak: kamu melakukannya di awal setiap sesi R (dalam praktik, di bagian atas setiap script). Di sini tidak perlu tanda kutip, karenalibrary()itu khusus dan menerima nama polosnya (library("dplyr")juga berhasil, kalau kamu lebih suka konsisten).
Dua jenis kegagalannya memberi tahu langkah mana yang kamu lewatkan. Error: there is no package called 'dplyr' dari library() berarti package itu belum pernah diinstal. Error: could not find function "filter" (atau "%>%") di tengah script berarti package-nya sudah terinstal, tetapi sesi ini tidak pernah memuatnya. Menaruh setiap panggilan library() di paling atas script, bukan tersebar di dalamnya, membuat kegagalan kedua terlihat di detik pertama, sekaligus berfungsi sebagai daftar dependensi script itu. Menginstal tidyverse bekerja dengan cara yang sama: install.packages("tidyverse") sekali, library(tidyverse) per sesi, yang memuat dplyr, ggplot2, dan anggota inti lainnya dalam satu baris.
Yang tidak boleh kamu lakukan adalah membiarkan install.packages() di dalam script yang kamu jalankan berulang kali atau kamu bagikan: ia akan mengunduh ulang di setiap eksekusi dan bisa mengejutkan siapa pun yang menjalankannya. Instalasi dilakukan di console; pemuatan dilakukan di script.
require() dan pkg::fun()
require() terlihat seperti sinonim library(), dan memakainya seolah sinonim adalah kesalahan yang umum. Bedanya ada pada apa yang terjadi ketika package tidak ada: library() berhenti dengan error; require() mencetak peringatan, mengembalikan FALSE, dan membiarkan script berlanjut, biasanya untuk mati dua puluh baris kemudian dengan pesan "could not find function" yang membingungkan, alih-alih pesan "no package called" yang jujur. Untuk memuat dependensi, pakai library(): gagal dengan jelas di bagian atas adalah sebuah keunggulan. require() hanya berguna di pemeriksaan kondisi, tempat nilai kembaliannya justru yang dibutuhkan:
if (!require(praise)) {
install.packages("praise")
library(praise)
}
Ada juga cara memakai package tanpa memuatnya sama sekali: operator :: memanggil satu fungsi dengan alamat lengkapnya, package::function(). Package-nya harus sudah terinstal, tetapi tidak ada yang ditempelkan ke sesimu:
(stats toh sudah dimuat otomatis, jadi sd() biasa juga berhasil, tetapi sintaksnya sama untuk package terinstal mana pun.) :: unggul di dua tempat: panggilan sekali pakai yang tidak sepadan dengan satu baris library(), dan membedakan nama ketika dua package yang dimuat mengekspor nama yang sama. dplyr::filter() vs stats::filter() adalah bentrokan klasiknya.
Menjaga Package Tetap Terbaru
Package berkembang terpisah dari R, jadi memperbaruinya adalah tugasmu:
update.packages() # offers to update everything outdated
update.packages(ask = FALSE) # same, without prompting per package
Satu aturan yang tidak terlihat jelas: package dibangun untuk versi major.minor R tertentu. Saat kamu meng-upgrade R itu sendiri (misalnya dari 4.3 ke 4.4, lihat menginstal R), library package lamamu umumnya tidak ikut terbawa, dan solusinya cukup menginstal ulang package yang kamu pakai di versi baru. Sepuluh menit install.packages(), bukan bencana, tetapi ini mengejutkan orang saat pertama kali script mereka menyambut instalasi R baru dengan deretan error "no package called".
Melihat Apa yang Kamu Punya
Tiga fungsi menjawab "apa yang terinstal dan di mana":
installed.packages()[, "Version"] # every installed package with its version
sessionInfo() # R version + what THIS session has loaded
.libPaths() # the folders where packages are installed
installed.packages() mengembalikan matriks dengan satu baris per package; kolom Version biasanya yang kamu butuhkan. sessionInfo() adalah alat reprodusibilitas: tempel output-nya ke laporan bug, dan pembacanya akan tahu versi R, OS, serta versi persis setiap package yang dimuat. .libPaths() menampilkan folder library yang dicari R; mengetahui fungsi ini ada membuat pertanyaan "package itu sebenarnya disimpan di mana?" tidak lagi misterius, dan menjelaskan kenapa hak admin kadang penting di komputer bersama.
Package yang Perlu Kamu Kenal
Kamu belum membutuhkannya hari ini, tetapi kamu akan terus bertemu dengannya. Mengetahui kegunaan masing-masing membantumu membaca kode orang lain:
- dplyr: kata kerja manipulasi data:
filter,mutate,group_by,summarize. - ggplot2: package plotting standar; sebagian besar grafik R yang kamu lihat di internet dibuat dengan ggplot2.
- tidyr: mengubah bentuk data antara format lebar dan panjang (
pivot_longer,pivot_wider). - readr / readxl: masing-masing untuk membaca CSV dengan cepat dan membaca file Excel.
- lubridate: tanggal yang berperilaku sesuai dugaanmu.
- stringr: manipulasi string yang konsisten.
- data.table: ekosistem data frame alternatif berperforma tinggi; dialek yang berbeda dari tidyverse, disukai untuk data besar.
- shiny: aplikasi web interaktif yang seluruhnya ditulis dengan R.
Enam yang pertama adalah inti tidyverse dan datang bersamaan lewat install.packages("tidyverse"). Kamu tidak wajib memakai satu pun dari semuanya (R dasar bisa melakukan semuanya), tetapi ekosistem inilah tempat sebagian besar kode R modern berada.
Yang Perlu Kamu Ingat
- CRAN menampung sekitar 20.000 package yang sudah diperiksa; Bioconductor dan GitHub mencakup sisanya.
install.packages("name")sekali per komputer (wajib pakai tanda kutip);library(name)sekali per sesi, di bagian atas script.library()gagal dengan jelas, dan itu bagus;require()mengembalikanFALSE, jadi hanya berguna di dalam pemeriksaan.pkg::fun()memakai satu fungsi tanpa menempelkan package-nya, dan menyelesaikan bentrokan nama.update.packages()menjaga semuanya tetap terbaru; upgrade besar R berarti menginstal ulang package.sessionInfo()adalah caramu memberi tahu seseorang (atau dirimu di masa depan) persis di lingkungan apa kodemu berjalan.
Berikutnya: working directory, tempat R mencari file, dan kenapa itu hal pertama yang perlu diperiksa ketika membaca data gagal.
Pertanyaan yang sering diajukan
Bagaimana cara menginstal package di R?
Jalankan install.packages("name") dengan nama package di dalam tanda kutip, misalnya install.packages("dplyr"). R mengunduhnya dari CRAN dan menginstalnya di komputermu. Kamu cukup melakukannya sekali per komputer; setelah itu, muat di setiap sesi dengan library(dplyr).
Apa bedanya install.packages() dan library()?
install.packages("dplyr") mengunduh package ke komputermu, sekali per komputer. library(dplyr) memuat package yang sudah terinstal ke sesi yang sedang berjalan, sekali per sesi, biasanya di bagian atas setiap script. Menginstal tanpa memuat tidak memberimu apa pun yang bisa dipakai; memuat tanpa menginstal menghasilkan error "there is no package called 'dplyr'".
Apa bedanya library() dan require() di R?
Keduanya memuat package, tetapi saat gagal library() berhenti dengan error, sedangkan require() hanya memberi peringatan dan mengembalikan FALSE. Karena itu library() cocok untuk script (gagal dengan jelas dan sejak awal), dan require() hanya berguna di dalam pemeriksaan kondisi seperti if (!require(pkg)) install.packages(pkg).