"Imports"lebih aman daripada "Depends"(dan juga membuat paket menggunakannya 'warga negara yang lebih baik' sehubungan dengan paket lain yang menggunakannya "Depends").
Sebuah "Depends"upaya direktif untuk memastikan bahwa fungsi dari paket lain yang tersedia dengan melampirkan paket lain untuk path pencarian utama (yaitu daftar lingkungan dikembalikan oleh search()). Strategi ini, bagaimanapun, dapat digagalkan jika paket lain, yang dimuat kemudian, menempatkan fungsi yang identik sebelumnya di jalur pencarian. Ruang ( dalam SoDA ) menggunakan contoh fungsi "gam", yang ditemukan di kedua paket gamdan mgcv. Jika dua paket lain dimuat, satu tergantung gamdan satu tergantung mgcv, fungsi yang ditemukan oleh panggilan gam()akan tergantung pada urutan dua paket tersebut dilampirkan. Tidak baik.
Sebuah "Imports"direktif harus digunakan untuk setiap paket pendukung yang fungsinya adalah untuk ditempatkan di <imports:packageName>(dicari segera setelah <namespace:packageName>), bukan di jalan pencarian biasa. Jika salah satu paket dalam contoh di atas menggunakan "Imports"mekanisme (yang juga membutuhkan importatau importFromarahan dalam NAMESPACEfile), masalah akan diperbaiki dengan dua cara. (1) Paket itu sendiri akan mendapatkan kendali atas mgcvfungsi yang digunakan. (2) Dengan menjaga jalur pencarian utama bersih dari objek yang diimpor, itu bahkan tidak akan berpotensi memecah ketergantungan paket lain pada mgcvfungsi lainnya .
Inilah sebabnya mengapa menggunakan namespace adalah praktik yang sangat baik, mengapa sekarang diberlakukan oleh CRAN, dan (khususnya) mengapa menggunakan "Imports"lebih aman daripada menggunakan "Depends".
Diedit untuk menambahkan peringatan penting:
Ada satu pengecualian sayangnya umum untuk saran di atas: jika paket Anda bergantung pada paket Ayang sendiri "Depends"pada paket lain B, paket Anda mungkin akan perlu melampirkan Adengan "Dependsdirektif.
Ini karena fungsi-fungsi dalam paket Aditulis dengan harapan bahwa paket Bdan fungsinya akan dilampirkan pada search()path .
Sebuah "Depends"direktif akan memuat dan melampirkan paket A, di mana titik paket A's sendiri "Depends"direktif akan, dalam reaksi berantai, penyebab paket Byang akan dimuat dan melekat juga. Fungsi dalam paket Akemudian akan dapat menemukan fungsi dalam paket Byang mereka andalkan.
Sebuah "Imports"direktif akan memuat tetapi tidak melampirkan paket Adan akan tidak beban atau melampirkan paket B. ( "Imports", setelah semua, mengharapkan bahwa penulis paket menggunakan mekanisme namespace, dan paket itu Aakan menggunakan "Imports"untuk menunjuk ke fungsi apa pun Byang memerlukan akses.) Panggilan oleh fungsi Anda ke fungsi dalam paket Ayang bergantung pada fungsi dalam paket Bakan akibatnya gagal.
Hanya dua solusi untuk:
- Apakah paket Anda melampirkan paket
Amenggunakan "Depends"arahan.
- Lebih baik dalam jangka panjang, hubungi pengelola paket
Adan minta mereka untuk melakukan pekerjaan yang lebih hati-hati dalam membangun ruang nama mereka (dalam kata-kata Martin Morgan dalam jawaban terkait ini ).