Tuesday, August 6, 2019

R প্রোগ্রামিং: লুপের ভেতরে লুপ

Advertisements

একটা কাজ অসংখ্যবার করতে লুপ (loop) কোডিং-এর জগতে খুব জনপ্রিয় একটি নাম। R-এও লুপ দারুণভাবে কাজে আসে। অবশ্য R-এ বেশিরভাগ কাজ লুপ ছাড়াই সহজে হয়ে যায়। অন্য প্রোগ্রামিং ল্যাংগুয়েজে যেখানে সাধারণ যোগ বিয়োগেও লুপের দ্বারস্থ হতে হয়, সেখানে R দিয়ে সে কাজ করা যায় এক শব্দের কোড দিয়ে।
R প্রোগ্রামিং: দুজন পরিসংখ্যানবিদ রস ইহাকা ও রবার্ট জেন্টেলম্যান R তৈরি করেন। কাজে লাগান আগের S প্রোগ্রামিং ল্যাংগুয়েজ। বর্তমানে স্ট্যাটিস্টিক্যাল কম্পিউটিংয়ের জন্যে সেরা টুল R। প্রাথমিক সংস্করণ প্রস্তুত করা হয় ১৯৯৫ সালে। 



১ থেকে ১০০ পর্যন্ত যোগ করতে চান? শুধু লিখুন আর এন্টার (Enter) চাপুন।



তবে চাইলে এ কাজও আমরা লুপ ব্যবহার করে করতে পারি। 



উল্লেখ্য: R-এ সাধারণত '=' চিহ্নের বদলে <- ব্যবহার করা হয়। তবে চাইলে '='ও ব্যবহার করা যাবে। 

লুপ ছাড়াও অনেক কাজ করা যায় তা ঠিক আছে। তবে নিজেকে প্রোগ্রামার হিসেবে পরিচয় দিতে হলে লুপ না জানা হবে বড়সড় এক দুর্বলতা। তাছাড়া লুপ না বুঝে R-এরও সঠিক ব্যবহার হবে অসম্ভব একটি কাজ।

লুপের ভেতরের লুপকে বলে নেস্টেড লুপ (Nested loop)। তা দেখার আগে আবার দুয়েকটি সিংগেল লুপ দেখে নেই।

ধরুন, আমরা ১ থেকে ১০ এর বর্গ করব। আগের মতোই কাজটি লুপ ছাড়াও করা যাবে।



হ্যাঁ কাজটা অবিশ্বাস্য রকম সহজ। লুপ দিয়ে কেমন হয় দেখা যাক!



ফিবোনাচি সংখ্যা নিয়ে লেখায়ও আমরা লুপের ব্যবহার দেখেছি। সেটা আবার দেখে নিলে মন্দ হয় না।

আরও পড়ুন
☛  ফিবোনাচি সংখ্যার বিস্ময়কর জগৎ 



আশা করি সিংগেল লুপ নিয়ে আমরা যথেষ্ট জ্ঞান হাসিল করে ফেলেছি। এবার তাহলে নেস্টেড লুপ দেখা যাক।

আগে সরল লুপ দিয়ে শুরু হোক। ধরুন, আমরা দুটি ভেক্টরের প্রতিটি মানকে আরেকটি ভেক্টরের প্রতিটি মানের সাথে গুণ করব। আরেকটু খোলাসা করে বলি। ধরুন, আমরা ১ থেকে ১০ সংখ্যাগুলোর প্রতিটিকে ১১ থেকে ২০ সংখ্যাগুলোর প্রতিটির সাথে গুণ করব। তাহলে আমাদের ১০০টি সংখ্যা পাওয়ার কথা। দেখা যাক লুপ দিয়ে কী করা যায়। 



বাহ! কাজ করছে। এবার আরেকটু সিরিয়াস কাজ করা যাক।

আমরা কোনো সংখ্যা মৌলিক কি না তা চেক করব। এটার জন্য একটা ফাংশন বানানো যাক। যেখানে আপাতত থাকছে একটিমাত্র লুপ।



ফাংশনটি কাজ করছে কি না যাচাই করে দেখা উচিত।



হ্যাঁ, করছে। এবার এটাকে সামান্য জটিল করে একটিমাত্র সংখ্যার বদলে অনেকগুলো সংখ্যা বা ভেক্টরের জন্য কাজে লাগাই। এই কোডে আমরা i দিয়ে লুপ করেছি প্রতিটি সংখ্যাকে। আবার প্রতিটি সংখ্যা মৌলিক কি না তা দেখার জন্য সংখ্যাটির অর্ধেক বা অর্ধেকের বড় সংখ্যাটি পর্যন্ত সংখ্যাগুলো দিয়ে নির্দিষ্ট সংখ্যাটিকে ভাগ করে দেখেছি। এখানে ভাজকগুলোকে আমরা j দিয়ে লুপ করেছি।



এবার এখান থেকে আউটপুট দেখে নেওয়া যাক। আমরা ফাংশনটা এমনভাবে সাজিয়েছি যাতে কোন সংখ্যাগুলো মৌলিক তা দেখা যাবে আবার মোট কতটি মৌলিক তাও চেক করা যাবে।



লাইন দুটি থেকে আমরা পাব যথাক্রমে একটি স্কেলার ও একটি ডেটাফ্রেইম। স্কেলার বলবে সংখ্যাগুলোর মধ্যে কতটি মৌলিক। ডেটাফ্রেইমে is_prime কলামের ০ মানে সংখ্যাটি মৌলিক নয়। আর ১ মানে মৌলিক।

এই ফাংশনটি দিয়ে আমরা মৌলিক সংখ্যার অনেক দারুণ দারুণ কাজ করতে পারি। এ বিষয়ে আরও জানতে পড়তে পারেই উইকিপিডিয়ার এই লেখাটি

নেস্টেড লুপের দারুণ কোনো উদাহরণ আপনার কাছে থাকলে শেয়ার করতে ভুলবেন না যেন! 

Abdullah Al Mahmud

লেখকের পরিচয়

আব্দুল্যাহ আদিল মাহমুদ। লেখক ও ডেটা অ্যানালিস্ট। রিসার্চ অ্যাসিস্ট্যান্ট হিসেবে কর্মরত আছেন EAL-এ। পড়াশোনা ঢাকা বিশ্ববিদ্যালয়ের পরিসংখ্যান বিভাগে। সম্পাদনা করছেন Stat Mania বিশ্ব ডট কম। পাশাপাশি লিখছেন বিজ্ঞানচিন্তা, ব্যাপন পাই জিরো টু ইনফিনিটিসহ বিভিন্ন ম্যাগাজিনে। অসীম সমীকরণ মহাবিশ্বের সীমানা নামে দুটি বই লেখার পাশাপাশি অনুবাদ করেছেন অ্যা ব্রিফার হিস্ট্রি অব টাইম । লেখকের এই সাইটের সব লেখা এখানে ফেসবুক, গুগল প্লাস। পারসোনাল ওয়েবসাইট