"Imports"olduğundan daha güvenlidir "Depends"(ve aynı zamanda onu kullanan bir paketi, kullanılan diğer paketlere göre 'daha iyi bir vatandaş' yapar "Depends").
Bir "Depends"yönerge, diğer paketi ana arama yoluna (yani tarafından döndürülen ortamların listesi search()) ekleyerek başka bir paketten bir işlevin kullanılabilir olmasını sağlamaya çalışır . Bununla birlikte, daha sonra yüklenen başka bir paket, arama yoluna daha önce aynı şekilde adlandırılmış bir işlevi yerleştirirse, bu strateji engellenebilir. (Chambers soda ) fonksiyonunun örneğini kullanarak, "gam"hem de bulunur, gamve mgcvpaketler. gamBiri bağlı, diğeri bağlı olmak üzere iki paket daha yüklenmişse, mgcvçağrılar tarafından bulunan işlev, gam()bu iki paketin eklendiği sıraya bağlı olacaktır. İyi değil.
Bir "Imports"yönerge , normal arama yolu yerine işlevleri yerleştirilecek <imports:packageName>(hemen sonra aranacak <namespace:packageName>) herhangi bir destekleyici paket için kullanılmalıdır . Yukarıdaki örnekte yer alan paketlerden biri "Imports"mekanizmayı kullanıyorsa (bu aynı zamanda dosyada gerekli importveya importFromdirektifleri gerektirir NAMESPACE), meseleler iki şekilde iyileştirilebilir. (1) Paket, hangi mgcvişlevin kullanılacağı üzerinde kontrol sahibi olacaktır . (2) Ana arama yolunu içe aktarılan nesnelerden uzak tutmak, diğer paketin diğer mgcvişleve olan bağımlılığını potansiyel olarak bozmayacaktır .
Ad alanlarının kullanılmasının bu kadar iyi bir uygulama olmasının nedeni budur, neden şimdi CRAN tarafından uygulanmaktadır ve (özellikle) kullanımın kullanmaktan "Imports"daha güvenli olmasının nedeni budur "Depends".
Önemli bir uyarı eklemek için düzenlendi:
Orada bir yukarıdaki tavsiye maalesef yaygın istisna: paketiniz bir paket dayanıyorsa Akendisi "Depends"başka paket üzerinde B, paketiniz olasılıkla takmak gerekir Abir ile "Dependsdirektifi.
Bunun nedeni , paketteki işlevlerin A, paket Bve işlevlerinin search()yola ekleneceği beklentisiyle yazılmış olmasıdır .
Bir "Depends"yönerge paketi yükleyecek ve ekleyecektir A, bu noktada paketin Akendi "Depends"yönergesi bir zincirleme reaksiyonda paketin Byüklenmesine ve eklenmesine neden olacaktır. Paketteki işlevler Adaha sonra Bbağlı oldukları paketteki işlevleri bulabilecekler .
Bir "Imports"yönerge şekilde yükleyip olacak değil paketini takmak Ave irade ne yük ne de paketini takmak B. ( "Imports", Sonuçta bu paket yazarlar ad mekanizmasını kullanıyor ve bu paket beklediğini Akullanıyor olacak "Imports"herhangi fonksiyonlara noktasına B. O erişmeleri gerektiğini) paketinde herhangi fonksiyonlara Fonksiyonlarınızdan tarafından Aramalar Apaket işlevleri itimat Birade sonuç olarak başarısız olur.
Yalnızca iki çözüm şunlardan biridir:
- Paketinizin
Abir "Depends"yönerge kullanarak paket eklemesini sağlayın .
- Uzun vadede daha iyi, paketin bakımcısıyla iletişime
Ageçin ve ad alanlarını oluşturmak için daha dikkatli bir iş yapmalarını isteyin ( bu ilgili cevapta Martin Morgan'ın ifadesiyle ).