Her zaman kullanın library
. Asla 1 kullanım require
.
( 1 Neredeyse asla. Belki .)
Özetle, bunun nedeni, require
kodunuzu kullanırken bir hata sinyali vermeden farklı, hatalı sonuçlar verebilmesidir . Bu nadirdir ancak varsayımsal değildir! {Dplyr} 'in yüklenip yüklenemeyeceğine bağlı olarak farklı sonuçlar veren bu kodu göz önünde bulundurun :
require(dplyr)
x = data.frame(y = seq(100))
y = 1
filter(x, y == 1)
Bu, oldukça yanlış sonuçlara yol açabilir. Burada kullanmak library
yerine require
bir hata atar, bir şeylerin yanlış olduğunu açıkça gösterir. Bu iyi .
Ayrıca diğer tüm hataların hata ayıklamasını daha da zorlaştırır: require
Komut dosyanızın başlangıcında bir paket kullanırsanız ve dışa aktarımını 500 satırında kullanırsanız, 500 satırında "nesne 'foo' bulunamadı" hata iletisini alırsınız. hata “'bla' diye bir paket yok”.
Kabul edilebilir tek kullanım durumu require
, diğer cevapların bazılarının gösterdiği gibi, dönüş değerinin hemen kontrol edilmesidir. Bu oldukça yaygın bir kalıptır, ancak bu durumlarda bile, varlık kontrolünü ve paketin yüklenmesini ayırmak daha iyidir (ve tavsiye edilir, aşağıya bakın).
Daha teknik olarak, require
aslında library
dahili olarak çağırır (paket önceden eklenmemişse - require
bu nedenle yedekli bir kontrol gerçekleştirir, çünkü paketin zaten yüklü olup olmadığını library
da kontrol eder). İşte require
ne yaptığını göstermek için basitleştirilmiş bir uygulama :
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
}
Deneyimli R geliştiricileri:
{Knitr}, {bookdown} ve diğer birçok paketin yazarı Yihui Xie şöyle diyor :
Bayanlar ve baylar, bunu daha önce de söyledim: requir () bir R paketi yüklemek için yanlış yoldur; bunun yerine kitaplığı () kullan
Herkesten daha popüler R paketlerinin yazarı Hadley Wickham ,
library(x)
Veri analizi komut dosyalarında kullanın . […] Hiç kullanmanıza gerek yok require()
( requireNamespace()
neredeyse her zaman daha iyidir)