ব্লগের লেখাগুলোতে আপনারা ধাপে ধাপে R প্রোগ্রামিংয়ের বেশ কিছু মৌলিক বিষয় সম্পর্কে জেনেছেন। আমরা ভেরিয়েবল ব্যবহার করেছি, ভেক্টর বানিয়েছি, কন্ডিশনাল স্টেটমেন্ট লিখেছি এবং লুপ চালিয়েছি। এখন স্বাভাবিকভাবেই একটি প্রশ্ন আপনারা চিন্তা করতে পারেন। “আমি যদি একই কাজ বারবার করতে থাকি, তাহলে কি একই কোড বারবার নতুন করে লিখতে হবে?” এই প্রশ্নের উত্তরই হলো ফাংশন (Function)।
সহজ ভাষায় বলতে গেলে, ফাংশন হলো বেশকিছু একসাথে লেখা কোড যা একটি নির্দিষ্ট কাজ করার জন্য একবার লিখে রাখা হয়। এই কোডটি এমনভাবে লেখা হয় যেন পরবর্তীতে সেই কাজটি বারবার করা যায় নতুন করে কোড না লিখে।
ফাংশনকে আপনি একটি যন্ত্র বা টুল হিসেবে ভাবতে পারেন। যেমন, একবার আপনি যদি একটি যন্ত্র বানিয়ে ফেলেন যেটা B cell এবং T cell এর ratio বের করে, তাহলে ভবিষ্যতে যতবারই এই হিসাব দরকার হোক না কেন, আপনাকে নতুন করে হিসাব লিখতে হবে না। আপনি শুধুমাত্র শুধু যন্ত্রটি ব্যবহার করলেই হবে। ব্যাপারটি অনেকটা এমন যে আপনাকে আর যন্ত্রটি কিভাবে কাজ করে সেটাও জানতে হবে না। আপনি জানবেন যে এরকম একটা যন্ত্র আছে আর যন্ত্রটি এই কাজ করে।
ফাংশনকে রান্নার রেসিপির সাথে তুলনা করা যায়।
• আপনি একবার রেসিপি লিখে রাখলেন
• পরে শুধু উপকরণ বদলালেই রান্না করা যাবে
• প্রতিবার নতুন করে পুরো রেসিপি লিখতে হবে না
প্রোগ্রামিংয়েও ঠিক তাই। ফাংশন হলো সেই “রেসিপি”, আর ইনপুট ডেটা হলো উপকরণ।
R-এ আমরা আগেই ফাংশন ব্যবহার করেছি। R এ দুইরকম ফাংশন আছে। একটি হল built-in function অন্যটি user-defined function। বাস্তবে আমরা শুরু থেকেই ফাংশন ব্যবহার করে আসছি। যেমন:
• mean() → গড় বের করে
• sum() → যোগফল বের করে
• length() → কতগুলো মান আছে বলে
• print() → আউটপুট দেখায়
এগুলো সবই R-এর built-in function। ব্যাপারটি নিয়ে যদি একটু চিন্তা করে তাহলে দেখবেন যে এই ফাংশন গুলো কিছু কাজ করছে। ধরুন mean()। বাংলায় গড়। আমরা কি করি সাধারণত? ধরুন ৩ টা সংখ্যা আছে। ১,২,৩। এর গড় কত? আমরা ৩ টা সংখ্যা যোগ করে যতগুলো সংখ্যা আছে টা দিয়ে ভাগ করি। ১+২+৩ = ৬। ৬ কে ৩ দিয়ে ভাগ করলে দাঁড়ায় ২। সুতরাং গড় হল দুই। আমরা এই কাজটি সহজেই একটি ফাংশন দিয়ে করে পারি এবং আমাদের ভেতরে কি কাজ হচ্ছে সেটা জানা লাগে না।
number <- c(1,2,3)
mean(number)
Output
[1] 2
এক্ষেত্রে দেখতে পাচ্ছেন আমরা mean() ব্যবহার করে কাজ করে ফেলছি কিন্তু mean() এর ভেতরে কি হচ্ছে সেটা আমাদের জানার দরকার হচ্ছে না। এটি হল R-এর built-in function। এখন আমরা শিখব, নিজেদের প্রয়োজন অনুযায়ী ফাংশন কিভাবে বানাতে হয়।
R-এ ফাংশন তৈরি করতে আমরা function() ব্যবহার করি। একটি ফাংশনের সাধারণ কাঠামো হলো:
function_name <- function(input) {
# code
return(output)
}
এখানে প্রতিটি অংশের আলাদা অর্থ আছে।
ফাংশনের প্রতিটি অংশ বোঝা
এটি ফাংশনের নাম। এই নাম ব্যবহার করেই আমরা পরে ফাংশনটি চালাব।
যেই ডেটা বা মান আমরা ফাংশনের ভেতরে পাঠাব।
এখানে আসল কাজটি করা হয়। এই অংশেই মূলত কাজ হয়।
ফাংশনের ফলাফল বাইরে পাঠানোর জন্য ব্যবহার করা হয়।
ধরুন, আমরা খুবই সাধারণ একটি কাজ করি— B cell এবং T cell এর ratio বের করা। প্রতিবার নিচের মতো কোড লেখা ঝামেলার:
ratio <- b_cells / t_cells
তাই আমরা এটাকে একটি ফাংশনে রূপ দিই।
bt_ratio <- function(b_cells, t_cells) {
ratio <- b_cells / t_cells
return(ratio)
}
এখন এই ফাংশনটি তৈরি হয়ে গেছে।
bt_ratio(500, 250)
Output
[1] 2
এখানে কী ঘটছে? • 500 গেছে b_cells এর জায়গায় • 250 গেছে t_cells এর জায়গায় • ফাংশনের ভেতরে division হয়েছে • ফলাফল return() দিয়ে বেরিয়ে এসেছে এই ফাংশনটি এখন একটি সাধারণ টুল, যেটা যেকোনো ল্যাবের জন্য ব্যবহার করা যাবে। একাধিক মানের উপর ফাংশন ব্যবহার
b_cells <- c(500, 700, 400)
t_cells <- c(250, 350, 200)
bt_ratio(b_cells, t_cells)
এতে প্রতিটি ল্যাবের ratio একসাথে পাওয়া যাবে। এটি R-এর vectorised কাজ করার ক্ষমতার একটি সুন্দর উদাহরণ।
একটি ফাংশন ব্যবহার করলে:
• একই লজিক এক জায়গায় থাকে
• ভবিষ্যতে পরিবর্তন করা সহজ হয়
• বড় প্রজেক্টে কাজ করা সহজ হয়
ধরুন, পরে আপনি ratio হিসাবের নিয়ম বদলাতে চান। ফাংশন থাকলে আপনাকে শুধু এক জায়গায় পরিবর্তন করলেই হবে।
ফাংশন হলো পুনর্ব্যবহারযোগ্য কোড এবং এটি কোডকে পরিষ্কার ও সংগঠিত করে। আমি যখন শেখা শুরু করেছি তখন আমার ফাংশন বেশি ব্যবহার করা হয় নাই। মূলত কোড লিখে কাজ করাকেই প্রাধান্য দিয়েছি। কিন্তু যতই কোড এর সংখ্যা বেশি হতে থাকে, তখন ফাংশন লেখার গুরুত্ব উপলব্ধি হয়। ফাংশন ব্যবহার করলে আপনার কোড এর সংখ্যা কম হবে এবং কোড পরিচ্ছন্ন হবে। একইসাথে আপনার কোড যদি অন্যরা ব্যবহার করতে চায় তাহলে আপনি একটা কোড লিখে ফাংশন এর ভিতর দিয়ে দিলে অন্যদের আপনার কোড এর ব্যবহার সহজ হয়।
আপনি যদি এই ব্লগের নিয়মিত আপডেট পেতে চান, তাহলে নিচের ফর্মটি পূরণ করুন। আমি নতুন কোনো কন্টেন্ট যোগ করার সাথে সাথেই আপনাকে ইমেইলের মাধ্যমে জানিয়ে দেব।