Programming-for-Bioscience

৩.১ ভেক্টর (Vectors)

ভেক্টর হচ্ছে R এর একটি মৌলিক ডেটা স্ট্রাকচার। এটি একটি এক-মাত্রিক (1 Dimensional)ডেটা স্ট্রাকচার যা একাধিক মান সংরক্ষণ করে রাখতে পারে। এটা বলতে আসলে কি বুঝায়? ধরুন বিগত অধ্যায় এ আমরা name অথবা x অথবা b_cell ভেরিয়াবল ব্যাবহার করেছি। কিন্তু এদের মধ্যে একটা বিষয় একরকম। একটু চিন্তা করতে পারবেন সেটা কি? সেটা হচ্ছে এই ভেরিয়াবল সবাই একটি মাত্র মান সংরক্ষণ করে। আমরা জীববিজ্ঞান এ যেসব ডেটা নিয়ে কাজ করি সেগুলা সবসময় শুধু একটি ডেটা হছে তেমন কোন কথা নেই। এক্ষেত্রে একাদিক ডেটা কে একসাথে সংরক্ষণ করার জন্য ভেক্টর ধারণার সূত্রপাত করা হয়েছে। একটি ভেক্টর এ আপনারা একাধিক সংখ্যা, স্ট্রিং অথবা লজিকাল মান সংরক্ষণ করতে পারবেন। আমরা ভেরিয়াবল এ যেমন ভেরিয়াবল এর নাম এবং <- এরপর ওই মান টি বসাই। এক্ষেত্রে আমরা ভেরিয়াবল এর নাম এরপর <- চিহ্ন এবং “c()” সহ লিখতে হবে। এক্ষেত্রে আমাদের মানগুলো () এর মাঝে বসাবো।

আগের অধ্যায় এ আমরা একটি বাটিতে B cell আর T cell এর সংখ্যা বৃদ্ধি করছিলাম। পরবর্তীতে যেই সংখ্যা গণনা করে এই ভেরিয়াবল এ সংরক্ষণ করছিলাম। ধরুন এই কাজটি এখন ৫ টা ভিন্ন গবেষণাগার এ করা হচ্ছে। গবেষণাগার গুলো ধরুন ঢাকা, চট্টগ্রাম, যশোর, খুলনা, সিলেট। আবার ধরুন আমরা যথাক্রমে ৫০০, ৭০০, ৪০০, ১০০০, ১৫০ টি B cell পেয়েছি। আমরা কিভাবে সংরক্ষণ করবো?

উদাহরণ : একাধিক সেলের সংখ্যা ভেক্টরে রাখা

ধরুন, আপনি পাচটি পৃথক গবেষণাগারে সেল সংখ্যা মেপেছেন এবং আপনি এই মান একটি ভেক্টরে রাখতে চান।

# Store cell counts in a vector
bcell_counts <- c(500, 700, 400, 1000, 150)
print(bcell_counts)

Output:

[1] 500  700  400 1000  150

** ব্যাখ্যা ** এখানে c() ফাংশনটি ব্যবহার করে আমরা পাঁচটি সেলের সংখ্যা ভেক্টরে সংরক্ষণ করেছি। ভেক্টরটি bcell_counts নামে ডিক্লেয়ার করা হয়েছে এবং এতে ৫০০, ৭০০, ৪০০, ১০০০, ১৫০ সেলের সংখ্যা রয়েছে।

আচ্ছা, আমরা উপরে শুধুমাত্র মান নিয়ে দেখিয়েছি। আমরা চাইলে অনেকগুলো শব্দ অথবা বাক্যও একটি ভেরিয়াবল এ সংরক্ষণ করতে পারি। আমরা উপরে বলেছি যে পাঁচটি ভিন্ন গবেষণাগার এ পেয়েছি। আমরা যদি এই তথ্য সংরক্ষণ করতে চাই আগের মত আমরা c() এর মধ্যে আমদের গবেষণাগার এর নাম লিখতে হবে। যেহেতু এগুলো শব্দ, সেহেতু আমাদের “” এই চিহ্ন এর মধ্যে সেগুলোর নাম লিখতে হবে।

উদাহরণ : পাঁচটি গবেষণাগার এর নাম ভেক্টরে রাখা

এবার ধরুন, আপনি পাঁচটি গবেষণাগার এর নাম সংরক্ষণ করতে চান। এটি স্ট্রিং ভেক্টরের উদাহরণ।

# Store laboratories name in a vector
laboratories <- c("Dhaka", "Chattogram", "Jashore", "Khulna", "Sylhet") print(laboratories)

Output:

[1] "Dhaka" "Chattogram" "Jashore" "Khulna" "Sylhet" 

ব্যাখ্যা এখানে আমরা পাঁচটি গবেষণাগার নাম একটি ভেক্টরে সংরক্ষণ করেছি। laboratories নামের এই ভেক্টরটিতে পাঁচটি গবেষণাগার নাম রয়েছে: ঢাকা, চট্টগ্রাম, যশোর, খুলনা, সিলেট।

ভেক্টরের উপাদান নির্বাচন (Vector Selection)

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

ভেক্টর উপাদান

এখানে প্রতিটি উপাদান একটি পজিশন অথবা ইনডেক্স থাকে। এখানে ছবিতে দেখা যাচ্ছে ৫০০ মানটি প্রথম (১) পজিশন এ আছে। একইভাবে ৪০০ মানটি আছে তৃতীয় (৩) পজিশন এ। এক্ষেত্রে নির্দিষ্ট পজিশন এর উপাদান বের করার নিয়ন হচ্ছে। [] চিহ্ন ব্যাবহার করে এর মধ্যে ওই পজিশনটি লিখা। ধরুন আমি তৃতীয়টি বের করতে চাইলে আমি লিখবে [৩]। আমরা একটি উদাহরণ দিয়ে আরেক্তু ভালভাবে বুঝার চেষ্টা করি।

উদাহরণ: একটি ভেক্টর থেকে নির্দিষ্ট পজিশনের উপাদান বের করা

ঠিক আগের মত আমাদের কাছে B cell এর মান সংরক্ষিত আছে। আমি চাচ্ছি এই ভেক্টর এর দ্বিতীয় উপাদানটি বের করতে দ্বিতীয় পরীক্ষাগারে কতগুলো B cell আছে তা বের করব।

# Store cell counts in a vector
bcell_counts <- c(500, 700, 400, 1000, 150)

# Select the second element (B cell count in the second lab)
second_lab_bcells <- bcell_counts[2]
print(second_lab_bcells)

Output:

[1] 700

ব্যাখ্যা এখানে আমরা bcell_counts[2] ব্যবহার করেছি, যা ভেক্টরের দ্বিতীয় উপাদান, অর্থাৎ দ্বিতীয় গবেষণাগারের B cell সংখ্যা (৭০০) বের করেছে। ভেক্টর থেকে নির্দিষ্ট উপাদান বের করার জন্য আমরা ভেক্টরের নামের পাশে বন্ধনী [ ] দিয়ে পজিশন (ইনডেক্স) উল্লেখ করি। একইভাবে আমরা অন্যান্য পজিশন অথবা গবেষণাগার এ B cell এর সংখ্যা বের করতে পারি।

অনেকসময় আপনরা এটাও করতে হতে পারে যে আপনি একাধিক গবেষণাগারের B cell সংখ্যা বের করতে চান। এক্ষেত্রে আমরা একইভাবে [] চিহ্ন এর মধ্যে c() দিয়ে ওই পজিশনগুলো লিখলে সংখ্যাগুলো বের হয়ে আসবে। ধরুন, আপনি প্রথম, তৃতীয়, এবং পঞ্চম গবেষণাগার এর B cell সংখ্যা একসাথে বের করতে চান। এক্ষেত্রে আপনি [c(1, 3, 5)] ব্যাবহার করলে সংখ্যা বের করে আনতে পারবেন।

উদাহরণ: একটি ভেক্টরের একাধিক উপাদান নির্বাচন

# Select the first, third, and fifth elements
selected_bcells <- bcell_counts[c(1, 3, 5)]
print(selected_bcells)

Output:

[1] 500 400 150

ব্যাখ্যা আমরা bcell_counts[c(1, 3, 5)] ব্যবহার করে প্রথম, তৃতীয়, এবং পঞ্চম উপাদান বের করেছি। এটি একাধিক উপাদান নির্বাচন করার একটি পদ্ধতি।

ভেক্টরের উপাদানের নামকরণ করা (Naming Vector Elements)

R-এ আপনি ভেক্টরের প্রতিটি উপাদানের জন্য নাম দিতে পারেন, যাতে আপনি প্রতিটি উপাদানকে তার নাম অনুযায়ী সহজে বের করতে পারেন। যেমন, আমরা B cell এর সংখ্যা কে প্রতিটি গবেষণাগার এর নাম দিয়ে নির্দিষ্ট করে দিতে পারি। এক্ষেত্রে আমরা names() ফাংশন ব্যাবহার করি। names() ফাংশনটির কাজ হচ্ছে ভেক্টর এর উপাদানগুলোর নাম নির্দিষ্ট করা। এই কাজটি আমি কেন এখন শিখতে যাবো? এর প্রধান কারণ হচ্ছে আপানদের জানান যে আমরা নাম দিয়ে ও ভেক্টর এর উপাদান গুলো বের করে আনতে পারি। আরেকটি প্রশ্ন আপনি করতে পারেন আমি ফাংশন এর কথা বলছি কিন্তু ফাংশন নিয়ে বর্ণনা দিচ্ছি না। আপাতত মনে করুন ফাংশন হচ্ছে কিছু কাজ করার উপায়। আমরা পরবর্তীতে খুবই গভীরভাবে ব্যাখ্যা করবো।

উদাহরণ : ভেক্টরের উপাদানের নামকরণ করা

আমরা এখানে B cell এর প্রতিটি সংখ্যা কোথায় পেয়েছি সেটা একই ভেরিয়াবল এর মধ্যে সংরক্ষণ করতে পারি। আমি দুটি উপায় দেখাব। আপনারা দুইটি উপায় জানবেন এবং একইসাথে কোন উপায়টি অন্যটির চেয়ে ভাল সেটা নিয়ে একটু চিন্তা করবেন। আমি কোড এর পরে এই ব্যাপারটি সম্পর্কে বলবো।

প্রথমত

# Store cell counts in a vector
bcell_counts <- c(500, 700, 400, 1000, 150)

# Store laboratory names
laboratories <- c("Dhaka", "Chattogram", "Jashore", "Khulna", "Sylhet")

# Name the elements of bcell_counts based on laboratories
names(bcell_counts) <- laboratories
print(bcell_counts)

Output:

   Dhaka Chattogram    Jashore     Khulna    Sylhet 
     500        700        	400       1000       150 

দ্বিতীয়ত

# Store cell counts in a vector
bcell_counts <- c(500, 700, 400, 1000, 150)

# Name the elements of bcell_counts based on laboratory names
names(bcell_counts) <- c("Dhaka", "Chattogram", "Jashore", "Khulna", "Sylhet")
print(bcell_counts)

Output:

   Dhaka Chattogram    Jashore     Khulna    Sylhet 
     500        700        	400       1000       150 

ব্যাখ্যা এখানে আমরা names() ফাংশনের সাহায্যে bcell_counts এর প্রতিটি উপাদানের জন্য নির্দিষ্ট ল্যাবের নাম যুক্ত করেছি। এখন প্রতিটি উপাদানের জন্য একটি নাম রয়েছে, যা ব্যবহার করে উপাদানগুলোকে আরও অর্থপূর্ণ করা হয়েছে।

এখন উপরের প্রশ্ন এর উত্তর দেই, আসলে সঠিক বলে কোন কথা নেই। আপনার প্রয়োজনমত আপনি কোড লিখবেন। যদি, ধরুন যদি এমন হয় যে আপনি যে গবেষণাগার এর নামগুলো কোড এ শুধু একবার এ ব্যাবহার করবেন তাহলে আপনার আলাদা করে ভেরিয়াবল ডিক্লেয়ার করার দরকার নেই। কিন্তু ধরুন পরবর্তীতে আপনি আরও কোড লিখবেন যেখানে আপনার গবেষণাগার এর নামগুলো ব্যাবহার করা লাগবে, সেক্ষেত্রে একটি আলাদা ভেরিয়াবল এ সংরক্ষণ করে রাখা প্রয়োজন হতে পারে।

উদাহরণ : উপাদান নাম অনুযায়ী নির্বাচন করা

এখন আমরা যদি কোনো নির্দিষ্ট ল্যাবের B cell সংখ্যা জানতে চাই, তাহলে আমরা সেই ল্যাবের নাম ব্যবহার করে সহজেই এটি বের করতে পারি। আপনি আগের সাথে যদি সাদৃশ্য দেখতে চান তাহলে বুঝতে পারছেন যে আপনি পজিশন দিয়ে অথবা উপাদান এর নাম দিয়ে, দুইটা উপায়ে সংখ্যা বের করতে পারবেন। ধরুন আমরা খুলনা এর গবেষণাগার এর B cell এর সংখ্যা বের করতে চাই। কিভাবে করবো? এক্ষেত্রে আমি ধরে রাখছি যে bcell_counts ভেরিয়াবল আগেই ডিকলেয়ার করা আছে।

# Select B cell count for "Khulna" lab
khulna_bcells <- bcell_counts["Khulna"]
print(khulna_bcells)

Output:

[1] 1000

ব্যাখ্যা আমরা bcell_counts[“Khulna”] ব্যবহার করে খুলনা ল্যাবের B cell সংখ্যা (১০০০) বের করেছি।

অনুশীলনী

প্রশ্ন ১: একটি ভেক্টর তৈরি করুন

R এ একটি ভেক্টর তৈরি করুন যেখানে পাঁচটি ভিন্ন গবেষণাগারে পাওয়া T সেলের সংখ্যা সংরক্ষণ করা হবে: ৮০০, ৬০০, ৯০০, ১২০০, ৩০০। ভেক্টরটি প্রিন্ট করুন।

প্রশ্ন ২: ভেক্টর থেকে নির্দিষ্ট উপাদান নির্বাচন করুন

ধরা যাক একটি ভেক্টর bcell_counts <- c(500, 700, 400, 1000, 150) রয়েছে। এই ভেক্টর থেকে ১ম এবং ৪র্থ উপাদানগুলো নির্বাচন করে নতুন একটি ভেক্টরে সংরক্ষণ করুন।

প্রশ্ন ৩: ভেক্টরের উপাদানের নামকরণ করুন

ধরা যাক, একটি T সেল সংখ্যা সংরক্ষিত ভেক্টর রয়েছে tcell_counts <- c(800, 600, 900, 1200, 300)। এই ভেক্টরের উপাদানগুলোর জন্য “Lab_A”, “Lab_B”, “Lab_C”, “Lab_D”, “Lab_E” নাম দিন names() ফাংশন ব্যবহার করে।

প্রশ্ন ৪: নাম ব্যবহার করে ভেক্টরের উপাদান নির্বাচন করুন

আগের প্রশ্নের নামযুক্ত T সেল ভেক্টর ব্যবহার করে “Lab_C” এর T সেলের সংখ্যা বের করে প্রিন্ট করুন।

প্রশ্ন ৫: একাধিক উপাদান নাম দ্বারা নির্বাচন করুন

উপরে উল্লেখিত নামযুক্ত ভেক্টর tcell_counts ব্যবহার করে, “Lab_A”, “Lab_D”, এবং “Lab_E” এর T সেলের সংখ্যা নির্বাচন করে প্রিন্ট করুন।

এই অধ্যায় সম্পর্কে আপনার কোন মন্তব্য থাকলে আমাকে জানান। এখানে ক্লিক করুন

আপডেট পাওয়ার জন্য নিবন্ধন করুন (Register for Updates)

আপনি যদি এই ব্লগের নিয়মিত আপডেট পেতে চান, তাহলে নিচের ফর্মটি পূরণ করুন। আমি নতুন কোনো কন্টেন্ট যোগ করার সাথে সাথেই আপনাকে ইমেইলের মাধ্যমে জানিয়ে দেব।

ফর্ম পূরণ করতে এখানে ক্লিক করুন