با این که خیلیها R را به عنوان یک نرمافزار آماری میشناسند(که به نظر من شناخت اشتباهی است)، R در ذات خود یک زبان برنامهنویسی کامل است و خیلی از چیزهایی که در زبانهای دیگر رایج هستند مانند توابع، حلقهها، آرایهها و … در R نیز وجود دارند. در این پست قرار است با نحوهی نوشتن یک تابع در R آشنا شویم.
نوشتن یک تابع در R نسبتا ساده است و طبق الگوی زیر انجام میشود:
function-name <- function(arg1,arg2,arg3=2, ...) { some codes # for example: newvar <- sin(arg1) + cos(arg2) newvar2 <<- sin(arg3) + cos(arg2) newvar / arg3 #return value }
function-name نام تابع است و بعد از نوشتن تابع، تابع را با استفاده از آن فراخوانی میکنیم.
arg1، arg2 و arg3 اصطلاحا argumentها یه به قول بعضی از دوستان برهانهای تابع هستند. در واقع تابع قرار است یک سری عملیات روی این آرگیومنتها انجام دهد. هنگام فراخوانی تابع حتما باید یک مقدار به هر کدام از آرگیومنتهای arg1 و arg2 اختصاص دهید اما برای arg3 نیازی به این کار نیست و در اینجا به عنوان مثال دارای مقدار پیشفرض ۲ است.
علامت … که بعد از ۳ آرگیومنت بالایی مشاهده میکنید یکی از ویژگیهای زبان R است که ellipsis نام دارد. این ویژگی به توابع در R این امکان را میدهد که هنگام فراخوانی هر تعداد argument که خواستند دریافت کنند. اگر از … استفاده نشود و هنگام تعریف تابع، دو argument برای آن تعریف شود، تابع هنگام فراخوانی فقط دو argument قبول میکند.
در بین دو علامت {} کدهای تابع نوشته میشوند و معمولا به آن function body میگویند. حرفهایهای R توصیه میکنند که از نوشتن تعداد زیادی کد در این قسمت پرهیز شود و هر تابع تا حد امکان فقط یک کار انجام دهد و برای کارهای پیچیدهتر، از نوشتن ترکیبی از چند تابع سادهتر استفاده شود.
کدهایی که در function body نوشته میشوند معمولا چند متغیر به وجود میآورند و این متغیرهای درون تابع در R دو نوع local و global دارند. متغیرهای لوکال فقط درون تابع و هنگام اجرای آن وجود دارند و فقط خود تابع به آنها دسترسی دارد و بعد از اتمام اجرای تابع دیگر وجود ندارند. اما متغیرهای گلوبال از بیرون تابع هم قابل دسترسی هستند و بعد از اجرای تابع باقی میمانند. در کد بالا newvar یک متغیر لوکال است اما newvar2 (که با ->>) به آن مقداردهی شده یک متغیر گلوبال است و بعد از اجرای تابع باقی میماند.
در نهایت آخرین خط کد function body مقداری است که تابع نوشته شده بعد از اجرا برمیگرداند و معمولا به آن return value میگویند.
برای نوشتن یک تابع در R خالی (بدون Rstudio ) از منوی file گزینهی new script را انتخاب کنید، تابع را طبق الگوی بالا در R بنویسید و سپس با کپی پیست کردن آن در کنسول آن را اجرا کنید. از این به بعد با تایپ کردن نام تابع میتوانید آن را فراخوانی کنید.
تابع نویسی در Rstudio کمی راحتتر است. کلیدهای ترکیبی ctrl+shift+N را فشار دهید تا پنل source این نرمافزار در بالای کنسول باز شود. تابع خود را در این پنل بنویسد، و سپس آن را با ماوس انتخاب کنید و روی Run کلیک کنید. مثالی از یک تابع در این پنجره(این تابع برای یک عملیات متنکاوی نوشته شده و متن را از کلمات و کاراکترهای اضافی خالی میکند.)
از همین پنجره میتوانید با کلیک روی علامت دیسکت تابع خود را با فرمت .R ذخیره کنید و در آینده دوباره از آن استفاده کنید.
نوشتن تابع در R مزایای بسیاری دارد، اولین مزیت بزرگ آن تکرارپذیری است، با نوشتن بخشی از کد خود که قرار است مرتبا از آن استفاده کنید در قالب یک تابع، استفاده از آن را بسیار راحتتر میکنید و از طرف دیگر، در نهایت کد بسیار خواناتری خواهید داشت. استفاده از تابع رفع عیب کد شما را نیز آسانتر میکند. فقط در هنگام نوشتن تابع این توصیهها را در نظر داشته باشید:
- سعی کنید تا حد امکان تابع کوتاه باشد
- فقط یک کار انجام دهد
- نام گویایی داشته باشد.
در پست بعدی، مثالی از نوشتن یک تابع در R را با هم دیگر بررسی خواهیم کرد.