Her zaman kullanın library. Asla 1 kullanım require.
( 1 Neredeyse asla. Belki .)
Özetle, bunun nedeni, requirekodunuzu 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 libraryyerine requirebir 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: requireKomut 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, requireaslında librarydahili olarak çağırır (paket önceden eklenmemişse - requirebu nedenle yedekli bir kontrol gerçekleştirir, çünkü paketin zaten yüklü olup olmadığını library da kontrol eder). İşte requirene 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)