Computer Programming Functions in R (R এ ফাংশনস) গাইড ও নোট

404

R এ ফাংশনস (Functions in R)

R প্রোগ্রামিং ভাষায় ফাংশন হলো কোডের একটি অংশ যা একটি নির্দিষ্ট কাজ সম্পাদন করে এবং সাধারণত পুনরায় ব্যবহৃত হতে পারে। ফাংশন ব্যবহার করে কোডকে আরও সংগঠিত এবং পুনঃব্যবহারযোগ্য করা যায়। ফাংশনগুলো ইনপুট (argument) গ্রহণ করে এবং একটি আউটপুট (output) প্রদান করে।

R-এ ফাংশন তৈরির জন্য function() ব্যবহার করা হয়। নিচে R এ ফাংশনগুলির বিভিন্ন দিক বিস্তারিতভাবে আলোচনা করা হয়েছে।


১. ফাংশন তৈরি করা (Creating Functions)

R-এ ফাংশন তৈরি করার জন্য function() ব্যবহার করতে হয়। এর মধ্যে ইনপুট প্যারামিটার (arguments) দেওয়া হয় এবং তারপর একটি রিটার্ন স্টেটমেন্ট (return statement) দিয়ে আউটপুট প্রদান করা হয়।

উদাহরণ:

# একটি সহজ ফাংশন যা দুইটি সংখ্যা যোগ করবে
add_numbers <- function(a, b) {
  sum <- a + b  # দুইটি সংখ্যার যোগফল হিসাব করা
  return(sum)   # ফলাফল রিটার্ন করা
}

# ফাংশন ডাকা
result <- add_numbers(5, 3)
print(result)  # আউটপুট হবে ৮

এখানে add_numbers ফাংশনটি দুইটি সংখ্যাকে ইনপুট হিসেবে নেয় এবং তাদের যোগফল আউটপুট হিসেবে রিটার্ন করে।


২. ডিফল্ট আর্গুমেন্টস (Default Arguments)

ফাংশনের মধ্যে ডিফল্ট আর্গুমেন্টস নির্ধারণ করা যেতে পারে, যাতে যদি ব্যবহারকারী আর্গুমেন্ট না দেন তবে ডিফল্ট মান গ্রহণ করা হয়।

উদাহরণ:

# ডিফল্ট আর্গুমেন্ট ব্যবহার
greet <- function(name = "Guest") {
  message <- paste("Hello, ", name)
  return(message)
}

# ফাংশন ডাকা
print(greet())         # আউটপুট হবে: Hello, Guest
print(greet("Alice"))  # আউটপুট হবে: Hello, Alice

এখানে name আর্গুমেন্টের জন্য একটি ডিফল্ট মান "Guest" নির্ধারণ করা হয়েছে, যাতে যদি আর্গুমেন্ট দেওয়া না হয়, তাহলে ডিফল্ট মান ব্যবহার করা হবে।


৩. ফাংশনে একাধিক আর্গুমেন্ট (Multiple Arguments in Functions)

R ফাংশনে একাধিক আর্গুমেন্ট ব্যবহার করা যায় এবং সেই আর্গুমেন্টগুলোর মান ফাংশনের ভিতরে ব্যবহার করা যায়।

উদাহরণ:

# দুইটি আর্গুমেন্ট ব্যবহার
multiply_numbers <- function(x, y) {
  result <- x * y
  return(result)
}

# ফাংশন ডাকা
print(multiply_numbers(4, 5))  # আউটপুট হবে ২০

এখানে x এবং y দুটি ইনপুট প্যারামিটার ব্যবহার করা হয়েছে, এবং তাদের গুণফল রিটার্ন করা হচ্ছে।


৪. ফাংশন আর্গুমেন্টের মধ্যে নামের ভিত্তিতে আর্গুমেন্ট প্রদান (Passing Arguments by Name)

R এ আর্গুমেন্টগুলোকে তাদের নাম ব্যবহার করেও ফাংশনে পাস করা যায়। এটি আর্গুমেন্ট প্যাসিংয়ের আরও স্পষ্ট পদ্ধতি।

উদাহরণ:

# নামের ভিত্তিতে আর্গুমেন্ট প্রদান
divide_numbers <- function(a, b) {
  result <- a / b
  return(result)
}

# আর্গুমেন্ট প্যাসিং নাম দিয়ে
print(divide_numbers(a = 10, b = 2))  # আউটপুট হবে ৫

এখানে a এবং b আর্গুমেন্টগুলোকে তাদের নাম ব্যবহার করে ফাংশনে পাস করা হয়েছে।


৫. ফাংশনের ভেতরে ফাংশন কল (Calling Functions Inside Functions)

একটি ফাংশনের ভিতরে অন্য একটি ফাংশনকে কল করা যেতে পারে। এটি কোড পুনঃব্যবহারের ক্ষেত্রে উপকারী।

উদাহরণ:

# একটি ফাংশন যা অন্য একটি ফাংশনকে কল করবে
square <- function(x) {
  return(x * x)
}

cube <- function(x) {
  return(square(x) * x)  # square ফাংশন কল করা হয়েছে
}

# ফাংশন ডাকা
print(cube(3))  # আউটপুট হবে ২৭

এখানে cube ফাংশনটির ভিতরে square ফাংশনটি কল করা হয়েছে।


৬. ফাংশনের আউটপুট (Return Statement)

ফাংশনে return() ব্যবহার করা হয় আউটপুট ফেরত দিতে। যদিও R এর শেষে ফাংশনের আউটপুট সরাসরি রিটার্ন হয়, কিন্তু স্পষ্টভাবে return() ব্যবহার করা ভাল অভ্যাস।

উদাহরণ:

# return() ব্যবহার
subtract_numbers <- function(x, y) {
  result <- x - y
  return(result)  # আউটপুট রিটার্ন করা
}

print(subtract_numbers(10, 4))  # আউটপুট হবে ৬

৭. ফাংশনের ভিতরে লজিক্যাল শর্ত ব্যবহার (Conditional Statements Inside Functions)

ফাংশনের ভিতরে if/else স্টেটমেন্ট ব্যবহার করে শর্তাধীন কার্যক্রম চালানো যেতে পারে।

উদাহরণ:

# ফাংশনের ভিতরে শর্ত প্রয়োগ
check_even_odd <- function(x) {
  if(x %% 2 == 0) {
    return("Even")
  } else {
    return("Odd")
  }
}

print(check_even_odd(4))  # আউটপুট হবে Even
print(check_even_odd(7))  # আউটপুট হবে Odd

এখানে, check_even_odd ফাংশনটি সংখ্যাটি Even না Odd তা চেক করে আউটপুট প্রদান করছে।


৮. Anonymous Functions (নামহীন ফাংশন)

R এ আপনি নামহীন ফাংশনও তৈরি করতে পারেন, যেগুলি সাধারণত একটি একক কার্যক্রম সম্পাদন করে এবং কিছু ক্ষেত্রে কোডের মধ্যে প্রয়োগ করা হয়।

উদাহরণ:

# নামহীন ফাংশন ব্যবহার
result <- sapply(1:5, function(x) x^2)  # ১ থেকে ৫ পর্যন্ত সংখ্যার বর্গফল
print(result)

এখানে, sapply() ফাংশনের ভিতরে একটি নামহীন ফাংশন ব্যবহার করা হয়েছে, যা ১ থেকে ৫ পর্যন্ত সংখ্যাগুলোর বর্গফল প্রদান করে।


সারসংক্ষেপ

R এ ফাংশনস একটি অত্যন্ত শক্তিশালী ধারণা যা কোডকে আরও সংগঠিত এবং পুনঃব্যবহারযোগ্য করে তোলে। ফাংশন ব্যবহারের মাধ্যমে কোডের যেকোনো অংশকে একাধিক বার ব্যবহার করা যায় এবং কোডের পুনরাবৃত্তি কমানো যায়। R এ ফাংশন তৈরি, ডিফল্ট আর্গুমেন্টস, একাধিক আর্গুমেন্ট, এবং নামের ভিত্তিতে আর্গুমেন্ট পাস করার মত গুরুত্বপূর্ণ বৈশিষ্ট্য রয়েছে যা প্রোগ্রামিংকে আরও সহজ এবং কার্যকরী করে তোলে।

Content added By

Functions তৈরি এবং ব্যবহার

287

Functions তৈরি এবং ব্যবহার

R প্রোগ্রামিং ভাষায় Functions একটি শক্তিশালী বৈশিষ্ট্য যা কোড পুনঃব্যবহারযোগ্যতা এবং সুসংগঠিত কোড লেখার জন্য ব্যবহৃত হয়। একটি function হল একটি ব্লক যা একটি নির্দিষ্ট কাজ সম্পাদন করে এবং যেকোনো স্থানে পুনরায় ব্যবহার করা যেতে পারে। এর মাধ্যমে কোডের পুনরাবৃত্তি কমানো যায় এবং কোড পরিষ্কার ও দক্ষ হয়।


১. Function তৈরি করা (Creating Functions)

R-এ একটি function তৈরি করতে function() ফাংশনটি ব্যবহার করা হয়। একটি function সাধারণত তিনটি অংশে বিভক্ত:

  1. Function Name: ফাংশনের নাম যা আপনি কল করবেন।
  2. Arguments: ফাংশনে প্রেরিত মান (parameters)।
  3. Body: ফাংশনের কোড, যা কার্যকরী কাজ করে এবং যে মানটি রিটার্ন করবে।

সাধারণ সিনট্যাক্স:

function_name <- function(arg1, arg2, ...) {
  # Function body
  # কোড যা আপনি রান করতে চান
  return(result)
}

উদাহরণ: সহজ একটি ফাংশন

# একটি সাধারণ ফাংশন তৈরি
add_numbers <- function(a, b) {
  sum <- a + b
  return(sum)
}

# ফাংশন কল করা
result <- add_numbers(3, 5)
print(result)  # এটি ৮ প্রিন্ট করবে

এখানে add_numbers একটি ফাংশন যা দুটি আর্গুমেন্ট (a এবং b) গ্রহণ করে এবং তাদের যোগফল (sum) রিটার্ন করে।


২. Return Keyword

R ফাংশনে return() ফাংশনটি ব্যবহৃত হয় ফাংশনের আউটপুট রিটার্ন করার জন্য। যদি return() না দেওয়া হয়, তবে ফাংশন শেষ হওয়ার পরে শেষ মূল্য (last evaluated expression) স্বয়ংক্রিয়ভাবে রিটার্ন হয়ে যায়।

উদাহরণ:

multiply_numbers <- function(x, y) {
  result <- x * y
  return(result)
}

product <- multiply_numbers(4, 6)
print(product)  # এটি ২৪ রিটার্ন করবে

৩. Default Arguments

R-এ ফাংশনের মধ্যে কিছু আর্গুমেন্টের জন্য ডিফল্ট মান নির্ধারণ করা যেতে পারে। এর মানে হল যে যদি আপনি ফাংশন কল করার সময় কোনো আর্গুমেন্ট না দেন, তবে তা ডিফল্ট মান গ্রহণ করবে।

উদাহরণ:

greet <- function(name = "Guest") {
  print(paste("Hello, ", name, "!", sep = ""))
}

greet("John")  # এটি "Hello, John!" প্রিন্ট করবে
greet()        # এটি "Hello, Guest!" প্রিন্ট করবে

এখানে name আর্গুমেন্টের জন্য একটি ডিফল্ট মান "Guest" দেওয়া হয়েছে।


৪. Multiple Return Values

R ফাংশন একাধিক মান (multiple values) রিটার্ন করতে পারে। এটি করতে একটি ভেক্টর, লিস্ট বা ডেটাফ্রেম ব্যবহার করা যেতে পারে।

উদাহরণ:

get_min_max <- function(numbers) {
  min_val <- min(numbers)
  max_val <- max(numbers)
  return(list(min = min_val, max = max_val))
}

result <- get_min_max(c(1, 2, 3, 4, 5))
print(result)  # এটি min = 1 এবং max = 5 রিটার্ন করবে

এখানে get_min_max ফাংশন একটি লিস্ট রিটার্ন করছে, যা দুটি মান (min এবং max) ধারণ করে।


৫. Anonymous Functions (Lambda Functions)

R-এ আপনি একটি Anonymous Function বা Lambda Function তৈরি করতে পারেন, যেটি একটি নাম ছাড়া ফাংশন যা একবার ব্যবহার করা হয়। এই ফাংশন সাধারণত function() ব্যবহার করে তৈরি করা হয়।

উদাহরণ:

# Anonymous function তৈরি
result <- sapply(1:5, function(x) x^2)  # ১ থেকে ৫ পর্যন্ত সংখ্যা স্কোয়ার করা
print(result)  # এটি 1, 4, 9, 16, 25 রিটার্ন করবে

এখানে function(x) x^2 একটি অ্যানোনিমাস ফাংশন যা ১ থেকে ৫ পর্যন্ত প্রতিটি সংখ্যার স্কোয়ার নেয়।


৬. Function with Variable Number of Arguments

R-এ একটি ফাংশন তৈরি করতে পারেন যা একটি চলমান সংখ্যা আর্গুমেন্ট গ্রহণ করতে পারে। এর জন্য ... (ellipsis) ব্যবহার করা হয়।

উদাহরণ:

sum_numbers <- function(...) {
  numbers <- c(...)
  total_sum <- sum(numbers)
  return(total_sum)
}

result <- sum_numbers(1, 2, 3, 4, 5)
print(result)  # এটি ১৫ রিটার্ন করবে

এখানে sum_numbers ফাংশন যে কোনো সংখ্যক আর্গুমেন্ট গ্রহণ করতে পারে এবং তাদের যোগফল রিটার্ন করবে।


৭. Scope of Variables

R-এ local এবং global স্কোপ থাকে। একটি ভেরিয়েবল যদি ফাংশনের ভিতরে ডিফাইন করা হয় তবে সেটি local স্কোপে থাকবে এবং শুধুমাত্র সেই ফাংশনের মধ্যে প্রবেশযোগ্য হবে। তবে যদি সেটি ফাংশনের বাইরেও ব্যবহৃত হয়, তবে সেটি global স্কোপে থাকবে।

উদাহরণ:

x <- 10  # global variable

my_function <- function() {
  y <- 5  # local variable
  print(x)  # global variable
  print(y)  # local variable
}

my_function()  # এটি x এবং y মুদ্রিত করবে

# print(y)  # এটি এরর দিবে কারণ y ফাংশনের বাইরের স্কোপে নেই

সারসংক্ষেপ

  • Functions: R-এ ফাংশনগুলি একটি নির্দিষ্ট কাজ সম্পাদন করতে ব্যবহৃত হয়। এগুলি কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে এবং কোডকে আরও সংগঠিত করে।
  • Function creation: function() ফাংশন ব্যবহার করে নতুন ফাংশন তৈরি করা হয়।
  • Return value: return() ব্যবহার করে ফাংশনের আউটপুট রিটার্ন করা হয়।
  • Default arguments: ডিফল্ট মান নির্ধারণ করে আর্গুমেন্ট প্রদান না করলেও ফাংশন কাজ করবে।
  • Multiple return values: একাধিক মান রিটার্ন করার জন্য list() ব্যবহার করা হয়।
  • Anonymous Functions: নাম ছাড়া ফাংশন তৈরি করা যেতে পারে যেগুলি একবার ব্যবহার করা হয়।
  • Variable number of arguments: ... ব্যবহার করে চলমান আর্গুমেন্ট গ্রহণ করা যায়।
  • Scope: ফাংশনের ভিতরে ডিফাইন করা ভেরিয়েবল শুধুমাত্র ফাংশনের ভিতরে প্রবেশযোগ্য থাকে (local scope)।

R-এ ফাংশন ব্যবহারের মাধ্যমে আপনি কোডের কার্যকারিতা এবং সংগঠন বৃদ্ধি করতে পারবেন, এবং একই কোড একাধিক স্থানে পুনরায় ব্যবহার করতে পারবেন।

Content added By

Arguments এবং Return Values

322

R এ Arguments এবং Return Values

R প্রোগ্রামিং ভাষায় ফাংশন তৈরি ও ব্যবহার করার সময় arguments এবং return values দুটি গুরুত্বপূর্ণ ধারণা রয়েছে। এখানে আমরা আলোচনা করব যে ফাংশনে কীভাবে আর্গুমেন্ট পাস করা হয় এবং ফাংশন থেকে কীভাবে ভ্যালু রিটার্ন (return) করা হয়।


১. Arguments (আর্গুমেন্টস)

Arguments হল এমন ভ্যালু বা প্যারামিটার যা একটি ফাংশনকে ইনপুট হিসেবে দেওয়া হয়। ফাংশন যখন কল (call) করা হয়, তখন আর্গুমেন্টগুলো সেই ফাংশনের মধ্যে পৌঁছায় এবং ফাংশন তার উপর কাজ করে।

Syntax:

function_name(arg1, arg2, ...)
  • arg1, arg2,...: ফাংশনের আর্গুমেন্টস, যা ফাংশনের ভিতরে ব্যবহৃত হবে।

আর্গুমেন্ট পাস করার উদাহরণ:

# একটি ফাংশন তৈরি করা যা দুটি সংখ্যা যোগ করবে
add_numbers <- function(a, b) {
  sum <- a + b  # a এবং b এর যোগফল
  return(sum)    # যোগফল রিটার্ন করা
}

# ফাংশনটি কল করা
result <- add_numbers(3, 5)
print(result)  # আউটপুট হবে 8

এখানে, add_numbers ফাংশনে দুটি আর্গুমেন্ট পাস করা হয়েছে, a এবং b, যা পরবর্তীতে ফাংশনের মধ্যে যোগফল হিসাব করতে ব্যবহৃত হচ্ছে।

ডিফল্ট আর্গুমেন্ট:

R ফাংশনে আর্গুমেন্টের ডিফল্ট মান (default values) সেট করা যেতে পারে, যাতে কল না করা হলে নির্দিষ্ট মান ব্যবহার করা হয়।

# একটি ফাংশন যেখানে ডিফল্ট আর্গুমেন্ট সেট করা হয়েছে
multiply_numbers <- function(a, b = 2) {
  result <- a * b
  return(result)
}

# যখন দ্বিতীয় আর্গুমেন্ট প্রদান করা হয়
print(multiply_numbers(5, 3))  # আউটপুট হবে 15

# যখন দ্বিতীয় আর্গুমেন্ট প্রদান করা না হয়
print(multiply_numbers(5))  # আউটপুট হবে 10 (ডিফল্ট b = 2)

এখানে, যদি b প্যারামিটারটি কল করার সময় দেওয়া না হয়, তবে তার ডিফল্ট মান 2 হবে।


২. Return Values (রিটার্ন ভ্যালুজ)

Return values হল সেই ভ্যালু বা আউটপুট যা একটি ফাংশন তার কার্যক্রম শেষ হওয়ার পর রিটার্ন (ফিরিয়ে) দেয়। ফাংশন যখন কার্যক্রম শেষ করে, তখন return() ফাংশন ব্যবহার করে কোনো ভ্যালু রিটার্ন করা হয়, যা ফাংশনটির ফলস্বরূপ।

Syntax:

return(value)
  • value: ফাংশনটি যেই মান বা ফলাফল ফেরত দেবে, সেটি।

রিটার্ন ভ্যালু ব্যবহার করার উদাহরণ:

# একটি ফাংশন যা দুটি সংখ্যা যোগ করে ফলস্বরূপ রিটার্ন করে
sum_values <- function(x, y) {
  total <- x + y
  return(total)  # যোগফল রিটার্ন করা
}

# ফাংশনটি কল করা
result <- sum_values(10, 20)
print(result)  # আউটপুট হবে 30

এখানে, sum_values ফাংশনটি দুটি আর্গুমেন্ট গ্রহণ করে এবং তাদের যোগফল return() ফাংশনের মাধ্যমে ফেরত দেয়।

একাধিক রিটার্ন ভ্যালু:

R-এ আপনি একাধিক মান রিটার্ন করতে পারেন, তবে এগুলো সাধারণত একটি লিস্টের মধ্যে প্যাক করা থাকে।

# একটি ফাংশন যা একাধিক মান রিটার্ন করবে
get_square_and_cube <- function(x) {
  square <- x^2
  cube <- x^3
  return(list(square = square, cube = cube))  # একাধিক মান রিটার্ন করা
}

# ফাংশনটি কল করা
result <- get_square_and_cube(3)
print(result$square)  # আউটপুট হবে 9
print(result$cube)    # আউটপুট হবে 27

এখানে, get_square_and_cube ফাংশনটি দুটি মান রিটার্ন করছে (একটি স্কয়ার এবং একটি কিউব), যা একটি লিস্টে প্যাক করা হচ্ছে। পরে, ওই মানগুলোকে লিস্ট থেকে এক্সেস করা হচ্ছে।


৩. নাম দিয়ে আর্গুমেন্ট পাস করা

R-এ আপনি ফাংশন কলের সময় আর্গুমেন্টগুলো নাম দিয়ে পাস করতে পারেন, যা ফাংশনের মধ্যে সঠিক মান পাস করতে সহায়ক।

# একটি ফাংশন তৈরি করা
multiply_values <- function(x, y) {
  return(x * y)
}

# নাম দিয়ে আর্গুমেন্ট পাস করা
result <- multiply_values(x = 5, y = 3)
print(result)  # আউটপুট হবে 15

এখানে, x এবং y আর্গুমেন্টগুলো নাম দিয়ে পাস করা হয়েছে, এবং R সঠিকভাবে মান অ্যাসাইন করেছে।


৪. ... (Ellipsis) ব্যবহার

R ফাংশনে ... ব্যবহার করা হয় এমন পরিস্থিতিতে, যেখানে আপনি একটি অজানা সংখ্যক আর্গুমেন্ট পাস করতে চান। এটি ডাইনামিক আর্গুমেন্টের জন্য ব্যবহৃত হয়।

# একটি ফাংশন যা যে কোনো সংখ্যক আর্গুমেন্ট গ্রহণ করতে পারে
sum_values <- function(...) {
  values <- c(...)  # সব আর্গুমেন্ট সংগ্রহ
  return(sum(values))  # আর্গুমেন্টগুলোর যোগফল রিটার্ন করা
}

# ফাংশনটি কল করা
print(sum_values(1, 2, 3, 4, 5))  # আউটপুট হবে 15

এখানে, ... ব্যবহার করে একাধিক আর্গুমেন্ট পাস করা হয়েছে এবং তাদের যোগফল রিটার্ন করা হয়েছে।


সারসংক্ষেপ

  • Arguments (আর্গুমেন্টস): ফাংশনে ইনপুট হিসেবে পাস করা মান, যা ফাংশনের ভিতরে ব্যবহৃত হয়। এগুলোর মান ডিফল্ট হিসেবে নির্ধারণ করা যেতে পারে অথবা ফাংশন কলের সময় পাস করা যায়।
  • Return Values (রিটার্ন ভ্যালুজ): ফাংশন থেকে আউটপুট বা ফলাফল হিসেবে যে মান রিটার্ন করা হয়, যা সাধারণত return() ফাংশনের মাধ্যমে করা হয়।
  • R ফাংশনগুলোতে একাধিক আর্গুমেন্ট এবং রিটার্ন ভ্যালু পাস করা যায়, এবং ডাইনামিক আর্গুমেন্ট হিসেবে ... ব্যবহৃত হতে পারে।

এভাবে আপনি R-এ ফাংশন তৈরি করে আর্গুমেন্ট পাস এবং রিটার্ন ভ্যালু ব্যবহার করতে পারবেন।

Content added By

Recursive Functions এবং Anonymous Functions

307

R প্রোগ্রামিংয়ে Recursive Functions এবং Anonymous Functions

R প্রোগ্রামিং ভাষায় Recursive Functions এবং Anonymous Functions দুটি গুরুত্বপূর্ণ কনসেপ্ট যা প্রোগ্রামিংয়ের বিভিন্ন সমস্যা সমাধানে ব্যবহার করা হয়। নিচে এই দুটি কনসেপ্টের বিস্তারিত আলোচনা দেওয়া হলো।


১. Recursive Functions (রিকার্সিভ ফাংশন)

Recursive function এমন একটি ফাংশন, যা নিজেই নিজেকে কল (call) করে। এটি সাধারণত তখন ব্যবহার করা হয় যখন একটি সমস্যা ছোট ছোট উপ-সমস্যায় ভাগ করা যায় এবং প্রতিটি উপ-সমস্যার সমাধান একইভাবে করা যায়। এই ধরনের ফাংশন একটি Base Case এবং একটি Recursive Case নিয়ে কাজ করে।

  • Base Case: এটি সেই শর্ত যা রিকার্সনকে থামায়। যদি ফাংশনটি Base Case-এ পৌঁছায়, তবে এটি নিজেকে আর কল করবে না।
  • Recursive Case: এখানে ফাংশন নিজেকে পুনরায় কল করে এবং সমস্যা আরও ছোট উপ-সমস্যায় বিভক্ত হয়।

উদাহরণ ১: ফ্যাক্টোরিয়াল (Factorial) ফাংশন

ফ্যাক্টোরিয়াল একটি সাধারণ উদাহরণ, যা রিকার্সন দিয়ে সহজে সমাধান করা যায়।

ফ্যাক্টোরিয়াল সমীকরণ:
\[ n! = n \times (n-1) \times (n-2) \times \dots \times 1 \]
এখানে, 0! = 1

ফাংশন উদাহরণ:

# ফ্যাক্টোরিয়াল ফাংশন
factorial <- function(n) {
  if (n == 0) {  # Base case
    return(1)
  } else {  # Recursive case
    return(n * factorial(n - 1))
  }
}

# ফ্যাক্টোরিয়াল 5 এর জন্য কল
result <- factorial(5)
print(result)

আউটপুট:

[1] 120

এখানে, factorial(5) প্রথমে 5 কে কল করে, তারপর factorial(4) কল করে, এবং এইভাবে চলতে থাকে যতক্ষণ না Base Case (0) পৌঁছায়, তখন ফাংশন থেমে যায়।

উদাহরণ ২: Fibonacci সিরিজ (Fibonacci Series)

Fibonacci সিরিজে প্রতিটি সংখ্যার মান আগের দুইটি সংখ্যার যোগফল হয়:
\[ F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2) \]

# Fibonacci ফাংশন
fibonacci <- function(n) {
  if (n == 0) {  # Base case
    return(0)
  } else if (n == 1) {  # Base case
    return(1)
  } else {
    return(fibonacci(n - 1) + fibonacci(n - 2))  # Recursive case
  }
}

# Fibonacci সিরিজের 6 তম মান
result <- fibonacci(6)
print(result)

আউটপুট:

[1] 8

এখানে, fibonacci(6) ফলস্বরূপ 8 হয়, কারণ Fibonacci সিরিজের মান হবে:
\[ F(6) = F(5) + F(4) = (5 + 3) = 8 \]


২. Anonymous Functions (অ্যানোনিমাস ফাংশন)

Anonymous functions বা ল্যাম্বডা ফাংশন হল এমন ফাংশন যেগুলোর কোনো নাম থাকে না। এগুলি এক লাইনের ফাংশন হিসেবে ডিফাইন করা হয় এবং যেখানে ফাংশনের নাম ব্যবহার করার প্রয়োজন হয়, সেখানে সরাসরি ফাংশনটি ব্যবহার করা হয়। এই ধরনের ফাংশন সাধারণত ছোট কাজের জন্য ব্যবহৃত হয়, যেখানে ফাংশনটি কোনো পরিবর্তন বা পুনঃব্যবহার করা হয় না।

R-এ, অ্যানোনিমাস ফাংশন function() কিওয়ার্ড দিয়ে তৈরি করা হয় এবং এটি সরাসরি কোডে ব্যবহার করা যায়।

উদাহরণ ১: একটি অ্যানোনিমাস ফাংশন ব্যবহার করা

# এক লাইনের অ্যানোনিমাস ফাংশন যা দুইটি সংখ্যার যোগফল দেয়
sum_function <- function(x, y) x + y

# ফাংশন কল করা
result <- sum_function(5, 3)
print(result)

আউটপুট:

[1] 8

উদাহরণ ২: অ্যানোনিমাস ফাংশন apply() ফাংশনের সঙ্গে ব্যবহার

অ্যানোনিমাস ফাংশন সাধারণত apply() ফাংশনের মধ্যে ব্যবহার করা হয়, যেখানে একটি ফাংশনকে ডেটা সেটের উপর প্রয়োগ করা হয়।

# একটি 2D ম্যাট্রিক্স তৈরি
matrix_data <- matrix(1:9, nrow = 3, byrow = TRUE)

# ম্যাট্রিক্সের প্রতিটি সারিতে অ্যানোনিমাস ফাংশন প্রয়োগ
result <- apply(matrix_data, 1, function(x) sum(x))
print(result)

আউটপুট:

[1] 15 15 15

এখানে, apply() ফাংশনে function(x) sum(x) অ্যানোনিমাস ফাংশন হিসেবে ব্যবহৃত হয়েছে, যা প্রতিটি সারির মান যোগ করে।


সারসংক্ষেপ

  • Recursive Functions: ফাংশন যা নিজেই নিজেকে কল করে, একটি Base Case এবং Recursive Case সহ। এটি সমস্যাকে ছোট ছোট উপ-সমস্যায় ভাগ করে সমাধান করে।
    • উদাহরণ: ফ্যাক্টোরিয়াল, Fibonacci সিরিজ
  • Anonymous Functions: নামহীন ফাংশন যা এক লাইনে ডিফাইন করা হয় এবং যেখানে প্রয়োজন সেখানেই ব্যবহার করা হয়।
    • উদাহরণ: apply() ফাংশনে অ্যানোনিমাস ফাংশন ব্যবহার

এই দুটি কনসেপ্ট প্রোগ্রামিংয়ের বিভিন্ন সমস্যা সমাধানে কার্যকরী এবং কমপ্যাক্ট কোড লেখার জন্য গুরুত্বপূর্ণ।

Content added By

Function Scoping এবং Environment Concepts

242

R প্রোগ্রামিং: Function Scoping এবং Environment Concepts

R প্রোগ্রামিং ভাষায় function scoping এবং environment concepts হল কোডের কার্যকারিতা এবং ভেরিয়েবলের পরিসীমা বুঝতে গুরুত্বপূর্ণ ধারণা। এগুলি জানতে পারলে কোডে কীভাবে ডেটা এবং ভেরিয়েবলগুলোর ম্যানেজমেন্ট হয় এবং কীভাবে ফাংশনগুলো ভেরিয়েবল ব্যবহার করে তার সঠিক ধারণা পাওয়া যায়।


১. Function Scoping

Scoping হল এমন একটি প্রক্রিয়া যার মাধ্যমে R একটি ভেরিয়েবলের মান খুঁজে বের করে এবং এটি কোথা থেকে আসছে তা নির্ধারণ করে। Function scoping ফাংশনগুলোতে ভেরিয়েবলগুলোর পরিসীমা এবং কার্যকারিতা নিয়ন্ত্রণ করে।

R-এ দুই ধরনের স্কোপিং থাকে:

  • Lexical Scoping (Static Scoping): R এর মূল স্কোপিং পদ্ধতি হল lexical scoping। এটি ফাংশনের মধ্যে ডেটার মান খুঁজে বের করার প্রক্রিয়া যা কোডের লেখা অবস্থানে নির্ভর করে। অর্থাৎ, যখন আপনি একটি ফাংশন লিখে থাকেন, তখন সেই ফাংশনের ভেরিয়েবলগুলি কিভাবে সঠিক মান খুঁজে পাবে তা নির্ধারণ করা হয়।

উদাহরণ:

x <- 10  # global scope

my_function <- function() {
  y <- 5  # local scope
  z <- x + y  # local and global scope combined
  return(z)
}

my_function()  # আউটপুট হবে 15 (global x এবং local y এর যোগফল)

এখানে, x একটি global variable এবং y একটি local variablemy_function() ফাংশনে x এবং y কে একসাথে ব্যবহার করা হয়েছে, যেখানে x গ্লোবাল স্কোপ থেকে নেওয়া হয়েছে এবং y ফাংশনের মধ্যে লোকার স্কোপ থেকে।


২. R Environment Concepts

R-এ environment হল একটি স্থান যেখানে ভেরিয়েবল এবং ফাংশনগুলি সংরক্ষিত থাকে। যখন একটি ভেরিয়েবল বা ফাংশন তৈরি করা হয়, তখন এটি একটি নির্দিষ্ট environment-এ থাকে এবং তার কার্যকারিতা নির্ভর করে কিভাবে সেই environment সেট করা হয়েছে।

কিছু গুরুত্বপূর্ণ environment concepts:

  1. Global Environment (Global Scope):

    • এটি R-এর মূল পরিবেশ, যেখানে আমরা সাধারণত ভেরিয়েবল এবং ফাংশন ডিফাইন করি।
    • উদাহরণ: যেকোনো ভেরিয়েবল বা ফাংশন যা স্ক্রিপ্টে ডিফাইন করা হয় তা global environment-এ থাকে।
    x <- 10  # global environment
  2. Local Environment:

    • ফাংশনের মধ্যে ডিফাইন করা ভেরিয়েবলগুলি একটি local environment তৈরি করে। এগুলি শুধুমাত্র ফাংশনের ভিতরে অ্যাক্সেসযোগ্য এবং বাইরে থেকে অ্যাক্সেস করা যায় না।
    my_function <- function() {
      y <- 5  # local environment
      return(y)
    }
    
    my_function()  # আউটপুট হবে 5
    print(y)  # Error: object 'y' not found
  3. Parent Environment:

    • যদি একটি ফাংশন অন্য একটি ফাংশনের ভিতরে ডিফাইন করা হয়, তবে তার জন্য একটি parent environment থাকে, যেখানে সেটি নির্দিষ্ট মান এবং ভেরিয়েবলগুলি খুঁজে পেতে পারে।
    parent_function <- function() {
      x <- 10  # parent environment
      
      child_function <- function() {
        print(x)  # child function accesses parent environment's 'x'
      }
      
      child_function()  # আউটপুট হবে 10
    }
    
    parent_function()

    এখানে, child_function() ফাংশনটি parent_function() এর ভেরিয়েবল x কে অ্যাক্সেস করতে পারে, কারণ lexical scoping অনুযায়ী, ফাংশনটি তার অভ্যন্তরীণ এবং বাইরের (parent) environment থেকে মান খুঁজে পেতে পারে।

  4. Search Path:
    • R এর search path হলো এমন একটি এলাকা যেখানে R বিভিন্ন environment অনুসন্ধান করে। এটি একে অন্যের উপর নির্ভর করে এবং ভেরিয়েবল বা ফাংশন খুঁজে বের করার জন্য R এই অনুসন্ধান ব্যবস্থাটি ব্যবহার করে।
    • সাধারণভাবে, global environment প্রথমে অনুসন্ধান করা হয় এবং তারপর প্যাকেজের environment-এ খোঁজা হয়।

৩. R-এ Environment কে কিভাবে ব্যবহার করবেন?

R-এ আপনি environment ব্যবহার করে দেখতে পারেন যে কীভাবে ভেরিয়েবলগুলি খুঁজে বের করা হয়, এবং কীভাবে ফাংশনগুলো নিজস্ব ভেরিয়েবল ধারণ করে।

Environment দেখা:

R-এ আপনি একটি ভেরিয়েবল বা ফাংশন তৈরি করার পর, ls() ফাংশন ব্যবহার করে আপনার বর্তমান environment-এ থাকা সকল উপাদান দেখতে পারেন।

x <- 10
y <- 20

# বর্তমান environment দেখতে ls() ফাংশন ব্যবহার করুন
ls()  # আউটপুট হবে "x" এবং "y"

Global Environment দেখতে:

# Global environment দেখতে
search()

Remove (মুছে ফেলুন) একটি ভেরিয়েবল:

# x ভেরিয়েবল মুছে ফেলতে
rm(x)

এবং আপনি যদি শুধুমাত্র একটি environment-এ কাজ করতে চান, তাহলে সেই environment কে নির্দিষ্ট করে ফাংশন বা কোড প্রয়োগ করতে পারেন।


৪. R-এর Function Scoping ও Environment Concepts সংক্ষেপে:

  • Function Scoping:
    • Lexical scoping (static scoping) ব্যবহার করে R ভেরিয়েবলের মান খুঁজে বের করে।
    • Global scope এবং local scope এর মধ্যে পার্থক্য আছে।
    • ফাংশনের ভিতরের ভেরিয়েবল শুধুমাত্র ফাংশনের মধ্যে কাজ করে, বাইরের স্কোপে তাদের অ্যাক্সেস করা যায় না।
  • Environment:
    • R-এ বিভিন্ন environment থাকে, যেমন global environment, local environment, এবং parent environment
    • R একটি search path অনুসরণ করে ডেটা খুঁজে বের করে, এবং ফাংশনের ভিতরে থাকা ভেরিয়েবলগুলি বাইরের environment থেকেও অ্যাক্সেস করা যেতে পারে যদি সেগুলোর উপর নির্ভর করে।

এই ধারণাগুলি R-এ কোড লেখার সময় ডেটা ম্যানিপুলেশন এবং ফাংশন ব্যবহারের ক্ষেত্রে খুবই গুরুত্বপূর্ণ।

Content added By
Promotion

Are you sure to start over?

Loading...