ماڈیول اسباق (1/2)
تحریری افعال
R میں، فنکشنز فرسٹ کلاس شہری ہوتے ہیں (اپنے طور پر اشیاء) اور آپ کو اپنے کوڈ کو ماڈیولر، دوبارہ قابل استعمال، اور اچھی طرح سے منظم بلاکس میں ڈھانچے کی اجازت دیتے ہیں۔
فنکشن کی تعریف کرنا
فنکشن کی وضاحت کرنے کے لیے، function کلیدی لفظ استعمال کریں اور اسائنمنٹ آپریٹر <- کا استعمال کرتے ہوئے تخلیق شدہ آبجیکٹ کو متغیر (فنکشن کا نام) پر تفویض کریں۔
# Simple function definition
greet_user <- function() {
print("Hello, User!")
}
# Invoking the function
greet_user()پیرامیٹرز اور ریٹرن ویلیوز
فنکشنز ایک یا زیادہ پیرامیٹرز کو قبول کر سکتے ہیں۔ کسی قدر کو واضح طور پر واپس کرنے کے لیے، return() فنکشن استعمال کریں۔ اگر return() کو چھوڑ دیا جاتا ہے، تو R خود بخود فنکشن باڈی میں آخری تشخیص شدہ اظہار کی قدر واپس کر دے گا۔
# Function that adds two numbers and returns the result
add_numbers <- function(a, b) {
sum_result <- a + b
return(sum_result)
}
total <- add_numbers(5, 7)
print(total) # Prints 12پہلے سے طے شدہ دلائل
آپ کسی فنکشن کے پیرامیٹرز کے لیے ڈیفالٹ ویلیوز بتا سکتے ہیں۔ اگر فنکشن کی درخواست کرنے پر دلیل فراہم نہیں کی جاتی ہے، تو R ڈیفالٹ ویلیو استعمال کرے گا:
# The function uses a default discount rate of 10% (0.10)
apply_discount <- function(price, discount = 0.10) {
discounted_price <- price * (1 - discount)
return(discounted_price)
}
# Uses the default (10%)
print(apply_discount(100)) # Prints 90
# Specifies a custom discount (20%)
print(apply_discount(100, 0.20)) # Prints 80فہرستوں کے ساتھ ایک سے زیادہ قدریں واپس کرنا
چونکہ R میں ایک فنکشن return() کے ذریعے صرف ایک ہی چیز کو براہ راست واپس کر سکتا ہے، اگر ہمیں متعدد اقدار (ممکنہ طور پر مختلف اقسام یا لمبائی کی) واپس کرنے کی ضرورت ہے، تو ہم انہیں فہرست کے اندر بنڈل کر سکتے ہیں (list):
get_stats <- function(v) {
stats <- list(
mean_val = mean(v),
max_val = max(v)
)
return(stats)
}
results <- get_stats(c(10, 20, 30))
print(results$mean_val) # Prints 20گمنام فنکشنز اور sapply
گمنام فنکشنز (بغیر نام کی وضاحت کے ان لائن فنکشنز) انتہائی مفید ہوتے ہیں جب کسی ویکٹر یا فہرست کے عناصر پر فوری تبدیلیوں کو لاگو کرنے کے لیے sapply() جیسے فنکشنز کے ساتھ جوڑا بنایا جائے۔
جدید R میں (ورژن 4.1.0 کے بعد سے)، آپ کلاسک function(x) کے علاوہ شارٹ ہینڈ نحو \(x) کا استعمال کرتے ہوئے گمنام فنکشنز کی وضاحت کر سکتے ہیں:
v <- c(1, 2, 3)
# Using sapply with a classic anonymous function
sapply(v, function(x) x^2) # 1 4 9
# Using sapply with shorthand syntax (R >= 4.1.0)
sapply(v, \(x) x^2) # 1 4 9خود ہی آزمائیں۔
ڈبل_ویلیو نامی فنکشن کی وضاحت کریں جو ایک ہی دلیل x کو قبول کرتا ہے اور واپسی () کا استعمال کرتے ہوئے اس کا ڈبل (x * 2) واپس کرتا ہے۔
اشارہ دکھائیں۔
Usa la sintassi: double_value <- function(x) { return(x * 2) }
3 کوششوں کے بعد حل دستیاب ہے۔
calculate_area نامی فنکشن کی وضاحت کریں جو دو دلائل کو قبول کرتا ہے: چوڑائی اور اونچائی۔ فنکشن کو واپسی () کا استعمال کرتے ہوئے اپنی مصنوعات کو واپس کرنا ہوگا۔
اشارہ دکھائیں۔
پیرامیٹرز کی چوڑائی اور اونچائی کے ساتھ فنکشن کی وضاحت کریں، اور چوڑائی * اونچائی واپس کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
calculate_tax نامی فنکشن کی وضاحت کریں جو مطلوبہ دلیل کی رقم اور 0.22 کی ڈیفالٹ قدر کے ساتھ اختیاری دلیل کی شرح کو قبول کرتا ہے۔ مصنوعات کی رقم * شرح واپس کریں۔
اشارہ دکھائیں۔
USA: calculate_tax <- فنکشن(رقم، شرح = 0.22) { واپسی(رقم * شرح) }
3 کوششوں کے بعد حل دستیاب ہے۔
analyze_vector نامی فنکشن کی وضاحت کریں جو ایک ویکٹر v کو قبول کرتا ہے۔ فنکشن کو ایک فہرست واپس کرنی چاہیے جس میں دو عناصر ہوں جس کا نام sum (ویکٹر کا مجموعہ، sum(v) کے ساتھ شمار کیا جاتا ہے) اور len (ویکٹر کی لمبائی، لمبائی (v) کے ساتھ حساب کیا جاتا ہے)۔
اشارہ دکھائیں۔
نحو کا استعمال کریں: analyze_vector <- function(v) { return(list(sum = sum(v), len = length(v))) }
3 کوششوں کے بعد حل دستیاب ہے۔
ویکٹر وی کو دیکھتے ہوئے، ہر عنصر کی قدر کو تین گنا کرنے کے لیے ایک گمنام فنکشن کے ساتھ sapply() فنکشن کا استعمال کریں (اسے 3 سے ضرب دیں)۔ نتیجہ کو تین گنا متغیر میں محفوظ کریں۔
اشارہ دکھائیں۔
استعمال کریں: تین گنا <- saply(v, function(x) x * 3)
3 کوششوں کے بعد حل دستیاب ہے۔