توابع در R

توابع کد برنامه را به بخشهایی تقسیم می کنند که فهم برنامه آسانتر می شود. توابع به شکل زیر تعریف می شوند.

Func-name <- function (arguments) {
                            Statement
}

در مثال فوق انطباق آرگومانها بر اساس محل قرارگیری آنهاست.

می توان آرگومانها را با نام استفاده کرد. البته آرگومانهایی که نامدهی شده اند مقدار می گیرند و بقیه بر اساس محل قرارگیری مقدار می گیرند.

می توان به آرگومان توابع مقادیر پیش فرض داد.

نتیجه تابع با استفاده از تابع ()return برگشت می شود. اما اگر صراحتا در یک تابع ()return استفاده نشده باشد آنگاه مقدار آخرین جمله بصورت خودکار برگشت می شود.

تابع return فقط یک مقدار بر می گرداند . در صورتیکه بخواهیم بیش از یک مقدار برگردانیم از لیست مقادیر استفاده می کنیم.

Environment و Scope

زمانیکه وارد محیط R می شویم و با آن شروع به کار می کنیم، مجموعه ای از اشیا شامل متغیرها، توابع و … ایجاد می شود. به مجموعه این اشیا محیط (Environment) عمومی R گفته می شود. زمانیکه تابعی اجرا می شود، محیط اختصاصی خود را ایجاد می کند. اشیایی که داخل محیط عمومی تعریف شده اند، در طول اجرای برنامه وجود دارند و از همه جای برنامه قابل دسترس هستند، در واقع Scope این اشیا عمومی است. اما Scope اشیایی که داخل یک تابع تعریف شده اند محلی است و فقط در آن محیط و محیطهای داخلی آن قابل دسترس هستند. متغیرهای محلی با اتمام کار تابع آزاد می شوند و دسترسی به آنها امکانپذیر نیست حتی اگر منغیری به همان نام در محیط عمومی داشته باشیم. در مثال زیر از نقطه نظر تابع inner-func متغیرهای a  و  b  عمومی هستند،  اما از دید outer-func فقط a  عمومی است و b محلی است و c  کاملا مخفی است.

Outer-func <- function () {
                        b <- 20
                        inner-func <- function(){
                                    c <- 30
                        }
}
a <- 10

متغیرهای عمومی در داخل توابع نیز قابل مشاهده هستند اما انتساب مقدار جدید به آنها به شکل عادی یک متغیر محلی با همان نام ایجاد می کند که پس از خروج از آن محیط از بین می رود. لذا برای انتساب به متغیرهای عمومی از داخل یک تابع باید بجای انتساب (->) از عملگر فوق انتساب (->>) استفاده کنیم. زمانیکه از این عملگر استفاده می کنیم، R به دنبال متغیری با آن نام به محیط پدر می رود و در صورتیکه پیدا نکرد به سطح بالاتر می رود تا این انتساب انجام شود. در صورتیکه در هیچ یک از سطوح بالاتر متغیری با این نام وجود نداشته باشد،  R متغیر عمومی جدیدی به همان نام ایجاد کرده و انتساب می دهد.

مطالب مرتبط