آموزش توابع در برنامه نویسی R با نکات و مثالهای کاربردی

یک تابع؛ مجموعه ای از دستورات است که برای انجام یک وظیفه ی خاص؛ در کنار هم سازماندهی شده اند. زبان برنامه نویسی R تعداد زیادی تابع داخلی دارد و کاربر می تواند توابع خود را نیز ایجاد کند.
در زبان برنامه نویسی R، یک تابع در واقع یک شیء است؛ به صورتی که مفسر R قادر است کنترل را همراه با آرگومان هایی که ممکن است برای آن که تابع بتواند اقدامات مربوطه را انجام بدهد؛ ضروری باشد؛ به تابع منتقل کند.
تابع به نوبه خود، وظایف مربوط به خودش را انجام می دهد و کنترل و نیز هر نتیجه ای که ممکن است در اشیاء دیگر ذخیره بشود را به مفسر منتقل می کند.
توابع (Functions) در زبان R را میتوانید مثل یک ماشین یا کارخانه کوچک پردازش اطلاعات در نظر بگیرید. شما مواد اولیه (دادهها) را به این دستگاه میدهید، دستگاه روی آنها یک عملیات مشخص و تکراری انجام میدهد و در نهایت محصول نهایی (نتیجه) را به شما تحویل میدهد.
اجزای اصلی یک تابع
هر تابع در برنامهنویسی به صورت کلی از سه بخش تشکیل شده است:
-
ورودیها (آرگومانها): همان مواد اولیهای هستند که به ماشین میدهید. یک تابع میتواند هیچ ورودی نداشته باشد، یا دهها ورودی مختلف (مثل بردار، متن، لیست) دریافت کند.
-
بدنه (پردازش): دستورالعملهای مخفی داخل ماشین که مشخص میکند چه اتفاقی باید روی ورودیها بیفتد.
-
خروجی (نتیجه): پاسخی که ماشین پس از پایان کار به شما برمیگرداند.
چرا توابع حیاتی هستند؟ (قانون «خودت را تکرار نکن»)
مهمترین دلیل استفاده از توابع، جلوگیری از نوشتن دستورات تکراری است. اگر قرار باشد یک محاسبه خاص را در دهها جای مختلف از سیستم خود انجام دهید، نیازی نیست هر بار فرمول آن را از نو بنویسید. فقط یک بار آن عملیات را در قالب یک «تابع» تعریف میکنید و هر زمان که به آن نیاز داشتید، فقط نام آن تابع را صدا میزنید.
این کار یک مزیت بزرگ دارد: اگر روزی نیاز باشد منطق محاسبه تغییر کند، شما فقط همان یک تابع مرکزی را ویرایش میکنید و تغییرات به صورت خودکار در کل سیستم اعمال میشود.
کاربرد توابع در سیستمهای فناوری بانکی
در توسعه نرمافزارهای مالی و فینتک، توابع نقش قلب تپنده سیستم را دارند و پیچیدگیها را مدیریت میکنند. چند مثال ملموس:
-
محاسبه اقساط وام: فرض کنید میخواهید قسط ماهانه یک مشتری را حساب کنید. شما یک تابع میسازید که سه ورودی میگیرد: «مبلغ وام»، «درصد سود» و «تعداد ماهها». تابع این سه متغیر را میگیرد، فرمولهای پیچیده بانکی را روی آنها اجرا میکند و فقط یک عدد نهایی (مبلغ قسط) را به عنوان خروجی به کاربر نمایش میدهد.
-
پنهانسازی اطلاعات حساس (Masking): تابعی طراحی میکنید که وظیفهاش دریافت یک شماره کارت ۱۶ رقمی (به عنوان یک رشته متنی) و تبدیل آن به فرمت امن برای چاپ در رسید است (مثلاً
6037-****-****-1234). -
اعتبارسنجی ورودیها: تابعی که یک شماره شبا (IBAN) را از کاربر میگیرد، بررسی میکند که آیا طول آن درست است و آیا ساختار آن با استانداردهای بانکی مطابقت دارد یا خیر، و در نهایت یک خروجی منطقی (True/False) مبنی بر صحت آن برمیگرداند.
توابع آماده در برابر توابع شخصیساز
زبان R به دلیل ماهیت آماریاش، دهها هزار تابع از پیش ساخته شده (Built-in) دارد که کارهای مختلفی از محاسبه میانگین گرفته تا رسم پیچیدهترین نمودارها را با یک کلمه انجام میدهند. با این حال، قدرت واقعی شما به عنوان توسعهدهنده زمانی نمایان میشود که برای نیازهای خاص پلتفرم خود، توابع جدید و اختصاصی خلق کنید.
تعریف تابع و مثال های آن به زبان دیگر
یک تابع R با استفاده از کلید واژه function ایجاد شده است. سینتکس پایه ی تعریف تابع R به صورت زیر می باشد:
function_name <- function(arg_1, arg_2, …) {
Function body
}
مؤلفه های تابع
بخش های متفاوت یک تابع به صورت زیر هستند:
- نام تابع – این نام واقعی تابع است. در محیط R به عنوان یک شیء با این نام ذخیره می شود.
- آرگومان ها – یک آرگومان در واقع یک پلیس هولدر است. زمانی که یک تابع فراخوانی می شود؛ شما یک مقدار را به یک آرگومان منتقل می کنید. آرگومان ها اختیاری هستند؛ یعنی یک تابع ممکن است هیچ آرگومانی را شامل نشود. همچنین آرگومان ها می توانند مقادیر پیش فرضی داشته باشند.
- بدنه تابع – بدنه تابع شامل مجموعه ای از عبارت ها است که تعریف می کند که تابع چه کاری انجام می دهد.
- مقدار بازگشتی – مقدار بازگشتی یک تابع؛ آخرین عبارت در بدنه تابع است که باید ارزیابی شود.
زبان برنامه نویسی R توابع درونی بسیار زیادی دارد که می توان مستقیماً آنها را در برنامه فراخوانی کرد؛ بدون این که آنها را ابتدا تعریف نمود. ما همچنین می توانید توابع خودمان را ایجاد کنیم که از آنها به عنوان توابع تعریف شده توسط کاربر (user defined) یاد می شود.
توابع درونی
مثال های ساده ای از توابع داخلی ()seq()، max()، sum و (…)paste و غیره هستند. آنها مستقیماً توسط برنامه هایی که کاربر می نویسد؛ فراخوانی می شود. شما می توانید با استفاده از توابع R، اغلب تابع هایی که در R استفاده می شوند را مشاهده کنید.
# Create a sequence of numbers from 32 to 44.
print(seq(32,44))
# Find mean of numbers from 25 to 82.
print(mean(25:82))
# Find sum of numbers frm 41 to 68.
print(sum(41:68))
زمانی که کد بالا را اجرا می کنیم؛ نتایج زیر حاصل می شود:
[۱] ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ ۳۷ ۳۸ ۳۹ ۴۰ ۴۱ ۴۲ ۴۳ ۴۴
[۱] ۵۳٫۵
[۱] ۱۵۲۶
توابع تعریف شده توسط کاربر
ما می توانیم از توابع تعریف شده توسط کاربر در R استفاده کنیم. این توابع بستگی به خواسته کاربر دارد و زمانی که ایجاد شدند؛ می توان از آنها به شکل توابع داخلی استفاده کرد. در ادامه مثالی از چگونگی روند ایجاد تابع و استفاده از آن را مشاهده می کنید.
# Create a function to print squares of numbers in sequence.
new.function <- function(a) {
for(i in 1:a) {
b <- i^2
print(b)
}
}
فراخوانی یک تابع
# Create a function to print squares of numbers in sequence.
new.function <- function(a) {
for(i in 1:a) {
b <- i^2
print(b)
}
}
# Call the function new.function supplying 6 as an argument.
new.function(6)
زمانی که کد بالا را اجرا می کنیم؛ نتیجه زیر ایجاد می شود:
[۱] ۱
[۱] ۴
[۱] ۹
[۱] ۱۶
[۱] ۲۵
[۱] ۳۶
فراخوانی یک تابع بدون آرگومان
# Create a function without an argument.
new.function <- function() {
for(i in 1:5) {
print(i^2)
}
}
# Call the function without supplying an argument.
new.function()
زمانی که کد بالا را اجرا می نماییم؛ نتیجه زیر حاصل می شود:
[۱] ۱
[۱] ۴
[۱] ۹
[۱] ۱۶
[۱] ۲۵
فراخوانی یک تابع با مقادیر آرگومان (توسط موقعیت و نام)
آرگومان ها برای فراخوانی یک تابع را می توان در ادامه عبارتی که تابع تعریف می شود؛ بیان کرد. همچنین می توان آنها را در یک توالی جداگانه بیان کرد اما باید آن را به نام های آرگومان ها تخصیص داد.
# Create a function with arguments.
new.function <- function(a,b,c) {
result <- a * b + c
print(result)
}
# Call the function by position of arguments.
new.function(5,3,11)
# Call the function by names of the arguments.
new.function(a = 11, b = 5, c = 3)
زمانی که کد بالا را اجرا می کنیم؛ نتیجه زیر حاصل می شود:
[۱] ۲۶
[۱] ۵۸
فراخوانی یک تابع با آرگومان پیش فرض
ما می توانیم مقدار آرگومان ها را در تعریف تابع بیان کنیم و تابع را بدون ارائه ی هر آرگومانی فراخوانی کنیم تا به نتایج پیش فرش دست یابیم. اما ما می توانیم برخی توابع را با ارائه ی مقادیر جدید آرگومان ها فراخوانی کنیم و به نتایج غیر پیش فرض دست یابیم.
# Create a function with arguments.
new.function <- function(a = 3, b = 6) {
result <- a * b
print(result)
}
# Call the function without giving any argument.
new.function()
# Call the function with giving new values of the argument.
new.function(9,5)
زمانی که کد بالا را اجرا می کنیم؛ نتیجه زیر حاصل می شود:
[۱] ۱۸
[۱] ۴۵
ارزیابی تنبل تابع
اصطلاحاً گفته می شود که ارزیابی آرگومانها برای توابع، تنبلانه انجام می شود به صورتی که فقط زمانی ارزیابی صورت می گیرد که توسط بدنه تابع مورد نیاز باشد.
# Create a function with arguments.
new.function <- function(a, b) {
print(a^2)
print(a)
print(b)
}
# Evaluate the function without supplying one of the arguments.
new.function(6)
زمانی که مد بالا را اجرا می کنیم؛ نتایج زیر حاصل می شود:
[۱] ۳۶
[۱] ۶
Error in print(b) : argument “b” is missing, with no default

سلام من میخوام تابعی تعریف کنم که داخلش از حروف یونانی و تووابع یونانی استفاده میشه..چطور باید تعریفش کنم؟
پاسخ