عند برمجة كثيراً من المشاكل الإحصائية بإستخدام لغة البرمجة آر R، نحتاج في كثير من الأحيان لبناء حلقات التكرار (loops). عليه سوف نناقش مجموعة الأوامر والطرق لبناء حلقات التكرار في لغة البرمجة آر. لتوضيح ذلك، نفرض اننا نريد حساب قيمة المعادلة: $y=x_i+x_{i+1}$ لجميع قيم $i\leq3$ حيث أن $x$ عبارة عن متجه (vector) يحوي القيم من 1 الى 4.
اولاً: باستخدام الأمر while، ويكون ذلك من خلال الكود التالي:
In: x=seq(1:4) i=1 y=c() while (i<=3){ y[i]=x[i]+x[i+1] i=i+1 } y Out: [1] 3 5 7
ثانياً: باستخدام الأمر for، ويكون ذلك من خلال الكود التالي:
In: y=c() for (i in 1:3){ y[i]=x[i]+x[i+1] } y Out: [1] 3 5 7
ويمكن كذلك استخدام حلقات التكرار بشكل متداخل. لتوضيح ذلك نفرض ان لدينا المعادلة التالية: $y=(x_i+x_{i+1})^\frac{1}{m}$ ونرغب في حسابها بالنسبة لـ $x=1,2,3$ و $m=1,2$، ويمكن ذلك من خلال استخدام الكود التالي:
In: x=seq(1:4) m=c(1,2) out=matrix(nrow=3,ncol=2) for (j in 1:2){ for (i in 1:3){ out[i,j]=(x[i]+x[i+1])^(1/m[j]) }} out Out: [,1] [,2] [1,] 3 1.732051 [2,] 5 2.236068 [3,] 7 2.645751
يمكن استخدام حلقة التكرار for مع جميع انواع المتجهات مثل التاريخ والنصوص وغيرها، مثلاً:
In: Names=c("Aziz", "Mohammed", "Ali") for (i in Names){ print(i) } Out: [1] "Aziz" [1] "Mohammed" [1] "Ali"
كذلك يمكن استخدامها لتكرار عمليات برمجية على عدد من الملفات في مجلد معين، فمثلا اذا كان المجلد myfolder يحوي عدد من الملفات A, B, C فيمكن استخدام الكود التالي لعمل تكرار على هذه الملفات:
In: setwd("myfolder") mydata=data.frame() fileNames = Sys.glob("*.txt") for (f in fileNames){ myfile=read.table(f,sep=",",header = T) mydata=rbind(myfile,mydata) } print(mydata) Out: Name Age 1 Sami 39 2 Ali 41 3 Mohammed 34
حيث يتم استبدال myfolder بدليل العمل الى المجلد الذي يحوي الملفات، وكذلك txt بأمتداد الملفات.
ملاحظة.
يمكن استخدام الأوامر التالية:
1. نستخدم الأمر next لتجاوز التكرار الحالي من الحلقة، فمثلاً لتجاوز التكرار عندما تكون قيمة x سالبة نستخدم:
In: x=c(4,-6,9) for (i in x){ if (i<0){next} out=sqrt(i) print(out) } Out: [1] 2 [1] 3
2. نستخدم الأمر break لأنهاء الحلقة الحالية، مثلاً لأنها الحلقة عندما يكون قيمة x سالبة نستخدم:
In: x=c(4,-6,9) for (i in x){ if (i<0){break} out=sqrt(i) print(out) } Out: [1] 2
وفقكم الله ..نتمني ان نري مزيدا” من المنشورات حول تطبيق برنامج R
مشكورين
بورك فيك وبجهودك دكتور عزيز