Selalu gunakan library
. Tidak pernah 1 digunakan require
.
( 1 Hampir tidak pernah. Mungkin .)
Singkatnya, ini karena, ketika menggunakan require
, kode Anda mungkin menghasilkan hasil yang berbeda dan salah, tanpa menandakan kesalahan . Ini jarang tetapi tidak hipotetis! Pertimbangkan kode ini, yang menghasilkan hasil yang berbeda tergantung pada apakah {dplyr} dapat dimuat:
require(dplyr)
x = data.frame(y = seq(100))
y = 1
filter(x, y == 1)
Ini dapat menyebabkan hasil yang sedikit salah. Menggunakan library
alih-alih require
melempar kesalahan di sini, menandakan dengan jelas bahwa ada sesuatu yang salah. Ini bagus .
Itu juga membuat debug semua kegagalan lainnya lebih sulit: Jika Anda require
sebuah paket di awal skrip Anda dan menggunakan ekspornya di baris 500, Anda akan mendapatkan pesan kesalahan "objek 'foo' tidak ditemukan" di baris 500, daripada sebuah kesalahan "tidak ada paket yang disebut 'bla'".
Satu-satunya kasus penggunaan yang dapat diterima require
adalah ketika nilai pengembaliannya segera diperiksa, seperti yang ditunjukkan beberapa jawaban lainnya. Ini adalah pola yang cukup umum tetapi bahkan dalam kasus ini lebih baik (dan disarankan, lihat di bawah) untuk memisahkan pemeriksaan keberadaan dan pemuatan paket.
Lebih teknis, require
sebenarnya memanggil secara library
internal (jika paket belum terpasang - require
dengan demikian melakukan pemeriksaan berlebihan, karena library
juga memeriksa apakah paket sudah dimuat). Berikut ini adalah implementasi yang disederhanakan require
untuk menggambarkan apa yang dilakukannya:
require = function (package) {
already_attached = paste('package:', package) %in% search()
if (already_attached) return(TRUE)
maybe_error = try(library(package, character.only = TRUE))
success = ! inherits(maybe_error, 'try-error')
if (! success) cat("Failed")
success
}
Pengembang R yang berpengalaman setuju:
Yihui Xie , penulis {knitr}, {bookdown} dan banyak paket lainnya mengatakan :
Saudara-saudara, saya sudah mengatakan ini sebelumnya: mengharuskan () adalah cara yang salah untuk memuat paket R; gunakan perpustakaan () sebagai gantinya
Hadley Wickham , penulis paket R yang lebih populer daripada siapa pun, kata
Gunakan library(x)
dalam skrip analisis data. [...] Anda tidak perlu menggunakan require()
( requireNamespace()
hampir selalu lebih baik)