خانواده apply

از مهمترین دلايل زمان طولانی اجرای برنامه ها، وجود حلقه زياد يا حلقه های تو در تو در بدنه کدها است. رويكرد معمول در چنين شرايطی، استفاده از توابع ساخت يافته تر در جهت به حداقل رساندن تعداد حلقه ها است. خانواده apply در R Language از مجموعه توابع ساخت یافته است.

تابع apply

ساختار پيش فرض تابع apply به صورت

apply(X, MARGIN, FUN)

مولفه اول (X) یک آرایه یا ماتریس است.

اگر MARGIN برابر 1 باشد عملیات به صورت سطری و اگر برابر 2 باشد عملیات به صورت ستونی انجام می شود. چنانچه این مقدار برابر c(1,2) باشد عملیات به صورت سطری و ستونی انجام می پذیرد.

در مولفه FUN تابعی را که قصد داریم روی X پیاده سازی شود، را وارد می کنیم.

ماتریس زیر را در نظر بگیرید:

m1 <- matrix(C<-(1:10) ,nrow=5, ncol= 6) 

این ماتریس به شکل زیر است:

1   6   1   6   1   6
2   7   2   7   2   7   
3   8   3   8   3   8
4   9   4   9   4   9
5   10   5   10   5   10

با استفاده از تابع apply می خواهیم جمع ستونی این ماتریس را محاسبه کنیم:

a_m1 <- apply (m1, 2, sum)

خروجی قطعه کد بالا به صورت زیر است:

15   40   15   40   15   40

توابع lapply و sapply

ساختار این توابع به شکل زیر است:

sapply(X, FUN)
lapply(X, FUN)

تابع lapply روی فهرست ها و در حالت کلی بر روی انواع اشیا قابل استفاده است. (l در lapply نشانگر list است)

در این تابع نیاز به مشخص کردن جهت (ستونی، سطری و...) نیست و فقط به یک تابع (شناسه FUN) نیاز است چرا که هر مولفه فهرست یا بردار به عنوان شناسه تابع استفاده می شود. به هر حال تابع lapply همیشه یک فهرست را برمی گرداند. اما اگر بخواهیم یک بردار یا ماتریس داشته باشیم از sapply برای تبدیل خروجی تابع lapply استفاده می کنیم (s در sapply نشانگر simplify است). تابع sapply کاراتر از تابع lapply است.