সর্বদা ব্যবহার library। 1 ব্যবহার কখনও না require।
( 1 প্রায় কখনও না। হতে পারে ।)
সংক্ষেপে এটি হ'ল কারণ, ব্যবহার করার সময় requireআপনার কোডটি কোনও ত্রুটি সংকেত ছাড়াই ভিন্ন, ভ্রান্ত ফলাফল পেতে পারে । এটি বিরল তবে অনুমানক নয়! এই কোডটি বিবেচনা করুন, যা results dplyr load লোড করা যায় কিনা তার উপর নির্ভর করে বিভিন্ন ফলাফল দেয় :
require(dplyr)
x = data.frame(y = seq(100))
y = 1
filter(x, y == 1)
এটি সূক্ষ্মভাবে ভুল ফলাফল হতে পারে। এখানে একটি ত্রুটি নিক্ষেপের libraryপরিবর্তে ব্যবহার করে requireকিছুটা ভুল হয়েছে তা স্পষ্টভাবে ইঙ্গিত দিয়ে। এটা ভাল ।
এটি অন্যান্য সমস্ত ব্যর্থতা ডিবাগিংকে আরও কঠিন করে তোলে: যদি আপনি require আপনার স্ক্রিপ্টের শুরুতে একটি প্যাকেজ ব্যবহার করেন এবং এর রফতানি 500 লাইনে ব্যবহার করেন, তবে 500 এর লাইনে একটি ত্রুটি বার্তা "অবজেক্ট 'ফু' পাওয়া যায়নি" বরং একটি লাইক পাবেন get ত্রুটি "'ব্লে' বলে কোনও প্যাকেজ নেই"।
কেবলমাত্র গ্রহণযোগ্য ব্যবহারের ক্ষেত্রে requireহ'ল যখন এর রিটার্নের মানটি তাত্ক্ষণিকভাবে পরীক্ষা করা হয়, যেমন অন্য কয়েকটি উত্তর দেখায়। এটি একটি মোটামুটি সাধারণ প্যাটার্ন তবে এটির ক্ষেত্রেও অস্তিত্বের পরীক্ষা এবং প্যাকেজটির লোড পৃথক করে ভাল (এবং প্রস্তাবিত নীচে দেখুন) ভাল।
আরও প্রযুক্তিগতভাবে, requireআসলে libraryঅভ্যন্তরীণভাবে কল করে (যদি প্যাকেজটি ইতিমধ্যে সংযুক্ত না থাকে - তবে এটি requireনিরর্থক চেক করে, কারণ প্যাকেজটি ইতিমধ্যে লোড হয়েছে কিনা library তাও পরীক্ষা করে দেখুন)। requireএটি কী করে তা বোঝানোর জন্য এখানে একটি সরলীকৃত বাস্তবায়ন :
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
}
অভিজ্ঞ আর বিকাশকারীরা সম্মত হন:
I নিটার}, {বুকডাউন} এবং আরও অনেক প্যাকেজ লেখক ইহুই জাই বলেছেন :
ভদ্রমহোদয়গণ, আমি এটি আগে বলেছি: আর (প্যাকেজ) লোড করার ভুল পদ্ধতিটি প্রয়োজন; পরিবর্তে গ্রন্থাগার () ব্যবহার করুন
অন্য কারও চেয়ে বেশি জনপ্রিয় আর প্যাকেজের লেখক হ্যাডলি উইকহ্যাম বলেছেন
library(x)ডেটা বিশ্লেষণ স্ক্রিপ্টগুলিতে ব্যবহার করুন । […] আপনার কখনই ব্যবহার করার দরকার নেই require()( requireNamespace()প্রায় সবসময়ই ভাল)