عائلة الدالة apply في برنامج آر R هي بديل فعال للحلقات التكرارية (Loops) وتتعامل مع هياكل مختلفة من البيانات، وهي تشمل الدوال التالية:
- apply: وهي دالة تتعامل مع المصوفات حيث يمكن من خلالها إجراء العمليات على الصفوف او الأعمده بكل مرونه وهذه الدالة تأخد الشكل التالي:
apply(X, MARGIN, FUN)
حيث أن:
X | مصفوفة |
MARGIN | جزء من مصفوفة حيث 1 يشير للصفوف و 2 يشير للأعمدة |
FUN | الدالة المطلوب تطبيقها |
نفرض أن لدينا المصفوفة التالية:
In: X=array((1:9),c(3,3)) X Out: [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9
بالتالي الأمر apply يستخدم لتطبيق دالة على أعمدة او صفوف المصفوفة، فمثلاً يمكن حساب المتوسط (mean) للأعمدة كما يلي:
In: apply(X,2,mean) Out: [1] 2 5 8
او للصفوف كما يلي:
In: apply(X,1,mean) Out: [1] 4 5 6
كما يمكن استخدام apply مع اي دالة خاصة، فمثلاً لحساب مجموع عناصر كل عامود مضروب في 10 نستخدم:
In: apply(X,2,function(X)sum(X)*10) Out: [1] 60 150 240
2. lapply: وهي تتعامل مع قوائم البيانات (list) وتأخذ الشكل:
lapply(X, FUN, ...)
حيث أن:
X | قائمة (list) |
FUN | الدالة المطلوب تطبيقها |
ويمكن إستخدامها كما يلي:
In: X <- list(a = 1:10, b = rnorm(10)) lapply(X, mean) Out: $a [1] 5.5 $b [1] 0.4354553
حيث يمكن إستبدال الدالة mean بأي دالة مبنية في آر R او معرفة بواسطة المستخدم.
3. supply: وهي تقوم بنفس عمل الدالة lapply ولكن الإختلاف في المخرجات ولها الشكل:
sapply(X, FUN, ..., simplify, USE.NAME)
حيث أن:
X | قائمة (list) |
FUN | الدالة المطلوب تطبيقها |
simplify | تبسيط النتيجة الى متجه او مصفوفة |
USE.NAME | استخدام X اذا كانت نصية كأسماء للنتيجة إذا لم يكن لها أسماء |
ويمكن إستخدامها كما الكود التالي:
In: X = list(a = 1:10, b = rnorm(10)) sapply(X,mean) Out: a b 5.5000000 0.3474299
4. vapply: وهي تشبه الدالة sapply ولكن تتطلب تحديد نوع المخرجات المرغوبة من الدالة وتأخذ الشكل:
vapply(X, FUN, FUN.VALUE, , ..., USE.NAME)
حيث أن:
X | قائمة (list) |
FUN | الدالة المطلوب تطبيقها |
FUN.VALUE | متجه (قالب للنتيجة من FUN) |
USE.NAME | استخدام X اذا كانت نصية كأسماء للنتيجة إذا لم يكن لها أسماء |
وتستخدم كما في الكود التالي:
In: X = list(a = 1:10, b = rnorm(10)) vapply(X, mean,numeric(1)) Out: a b 5.5000000 -0.1269196
كذلك يمكن إستخدامها كما يلي:
In: vapply(X, fivenum,c(Min. = 0, "1st Qu." = 0, Median = 0, "3rd Qu." = 0, Max. = 0)) Out: a b Min. 1.0 -1.3522746 1st Qu. 3.0 -0.4292616 Median 5.5 -0.1326287 3rd Qu. 8.0 0.5984162 Max. 10.0 1.0095862
5. replicate: وهي تقوم بتكرار عملية معينة عدد من المرات، حيث تأخذ الشكل التالي:
replicate(n, expr, simplify)
حيث أن:
n | عدد مرات التكرار |
expr | العبارة الحسابية المطلوب تكرارها |
simplify | تبسيط النتيجة الى متجه او مصفوفة |
فمثلاً، لحساب المتوسط لعينة عشوائية من التوزيع الطبيعي وتكرار ذلك 20 مره يمكن إستخدام الكود:
In: replicate(20, mean(rnorm(10000)), simplify = TRUE) Out: [1] -0.011153404 -0.001782791 -0.000470738 0.003906841 0.011111986 [6] -0.002796648 0.007120001 0.003120159 0.007987970 0.020770251 [11] 0.019081680 0.006376755 -0.003385706 -0.004729454 0.006226663 [16] -0.013943534 -0.004263212 -0.001227075 0.006997650 0.013958527
6. mapply: هو نسخة متعددة المتغيرات من الدالة sapply وهي تأخد الشكل:
mapply(FUN, ..., MoreArgs, simplify, USE.NAME)
حيث أن:
FUN | الدالة المطلوب تطبيقها |
MoreArgs | المدخلات الأخرى للدالة FUN |
simplify | تبسيط النتيجة الى متجه او مصفوفة |
USE.NAME | استخدام أسماء المدخل الأول إذا كان له أسماء أو إذا كان متجه نصي فيستخدم كأسماء |
ويمكن إستخدامها كما في الكود التالي:
In: mapply(rep, times = 1:3, x = letters[1:3]) Out: [[1]] [1] "a" [[2]] [1] "b" "b" [[3]] [1] "c" "c" "c"
7. tapply: في بعض الأحيان نحتاج الى تطبيق دالة على بعض البيانات وفقاً لعامل (factor) معين فيمكن أستخدام tapply والتي تأخذ الشكل:
tapply(X, INDEX, FUN, ..., default simplify)
حيث أن:
X | متجه |
INDEX | المدخلات الأخرى للدالة FUN |
FUN | الدالة المطلوب تطبيقها |
default | فقط في حالة التبسيط الى مصفوفة، القيم الأولية الإفتراضية |
simplify | تبسيط النتيجة الى متجه او مصفوفة |
ويمكن إستخدامها كما يلي:
In: X=rnorm(10) Group=rbinom(10,1,0.4) Data = data.frame(X,Group) tapply(X, Group, mean) Out: 0 1 0.3576166 -0.0807149
لو سمحت اي شيء متعلق بالبرامج علي اللغة R