R أثناء الحلقة مع أمثلة البرمجة
⚡ ملخص ذكي
تُكرر حلقة while في لغة البرمجة R جزءًا من التعليمات البرمجية طالما بقي شرطها صحيحًا. يتم اختبار الشرط قبل كل دورة، لذا قد لا يتم تنفيذ الجزء من التعليمات البرمجية على الإطلاق، ويجب أن يؤدي شيء ما بداخلها في النهاية إلى جعل الشرط خاطئًا.

أثناء حلقة في برمجة R
A حائط اللوب في لغة R، يتم تكرار كتلة من التعليمات البرمجية طالما بقي شرطها صحيحًا. يتم اختبار الشرط. قبل في كل دورة، لذلك يمكن أن تعمل حلقة while صفر مرات إذا كان الشرط خاطئًا من البداية.
أثناء بناء جملة الحلقة في R
فيما يلي بناء الجملة لحلقة While في برمجة R:
while (condition) {
Exp
}
R أثناء مخطط انسيابي للحلقة

ملاحظاتيجب أن يؤدي شيء ما داخل الحلقة في النهاية إلى جعل الشرط خاطئًا. إذا لم يحدث ذلك، فستستمر الحلقة إلى ما لا نهاية، وسيتعين عليك مقاطعة R باستخدام Esc أو Ctrl+C.
مقارنة بين حلقات while و for و repeat في لغة R
يوفر R ثلاثة مراحيضping تعتمد البنى، والاختيار بينها، على ما إذا كنت تعرف مسبقًا عدد التكرارات التي تحتاجها.
| المعايير | في حين | لـ | كرر |
|---|---|---|---|
| عدد التكرارات | غير معروف مسبقًا | معروف مسبقًا | غير معروف مسبقًا |
| تم اختبار الحالة | قبل كل تمريرة | تم استنفاد التسلسل | لا، يجب عليك طلب استراحة |
| الحد الأدنى من عمليات التشغيل | ببساطة وبدون الحاجة لخبرة ومعرفة | ببساطة وبدون الحاجة لخبرة ومعرفة | واحد |
| الاستخدام النموذجي | التقارب عند عتبة | تتبع متجه أو قائمة | منطق نمط Do-while |
| بناء الجملة | بينما (الشرط) { } | for (i in v) { } | كرر { … استراحة } |
# repeat always runs at least once count <- 1 repeat { print(count) count <- count + 1 if (count > 5) break }
يُعد مثال الأسهم أعلاه مناسبًا تمامًا لـ while: لا يمكنك معرفة عدد السحوبات العشوائية التي ستستغرقها قبل أن ينخفض السعر إلى 45.
حلقة التكرار While في لغة R: أمثلة
مثال 1
ابدأ بأبسط شيء ممكن برمجة آر مثال: تقوم بإنشاء عداد وتضيف إليه 1 في كل دورة. يجب أن تكون الحلقة قابلة للتوقف، لذا يُخبر الشرط R صراحةً بالتوقف بمجرد أن يتجاوز المتغير 10.
ملاحظات: إذا كنت تريد رؤية قيمة الحلقة الحالية، فأنت بحاجة إلى تغليف المتغير داخل الدالة print().
#Create a variable with value 1 begin <- 1 #Create the loop while (begin <= 10){ #See which loop we are on cat('This is loop number', begin, '\n') #add 1 to the variable begin after each loop begin <- begin+1 print(begin) }
الإخراج:
## This is loop number 1[1] 2 ## This is loop number 2[1] 3 ## This is loop number 3[1] 4 ## This is loop number 4[1] 5 ## This is loop number 5[1] 6 ## This is loop number 6[1] 7 ## This is loop number 7[1] 8 ## This is loop number 8[1] 9 ## This is loop number 9[1] 10 ## This is loop number 10[1] 11
مثال 2
لنفترض أنك اشتريت سهماً بسعر 50 دولاراً. إذا انخفض السعر إلى 45 دولاراً أو أقل، فأنت ترغب في بيعه على المكشوف، وإلا فاحتفظ به. كل دورة من الحلقة تُحرك السعر عشوائياً بما يصل إلى 10 دولارات في أي من الاتجاهين حول 50 دولاراً.
set.seed(123) # Set variable stock and price stock <- 50 price <- 50 # Loop variable counts the number of loops loop <- 1 # Set the while statement while (price > 45){ # Create a random price between 40 and 60 price <- stock + sample(-10:10, 1) # Count the number of loop loop <- loop + 1 # Print the number of loop print(loop) }
الإخراج:
## [1] 2 ## [1] 3 ## [1] 4 ## [1] 5 ## [1] 6 ## [1] 7
cat('it took',loop,'loop before we short the price. The lowest price is',price)
الإخراج:
## it took 7 loop before we short the price. The lowest price is 40
كيفية استخدام break و next في حلقة while
كلمتان مفتاحيتان تغيران التدفق الطبيعي لأي حلقة R.
- استراحة يخرج من الحلقة فورًا، تخطيping كل تكرار متبقٍ.
- التالي يتخلى فقط عن التكرار الحالي وينتقل مباشرة إلى اختبار الشرط التالي.
# break: stop as soon as a condition is met i <- 1 while (i <= 100) { if (i * i > 50) { cat('First square above 50 is', i * i, '\n') break } i <- i + 1 } # next: skip the even numbers i <- 0 while (i < 10) { i <- i + 1 if (i %% 2 == 0) next print(i) }
فخ واحد يستحق المعرفة. في حلقة while، ينتقل next إلى اختبار الشرط بدون تشغيل أي شيء أسفله. إذا تم زيادة العداد في أسفل جسم البرنامج، فإن next يتخطى تلك الزيادة وتتوقف الحلقة إلى الأبد. لهذا السبب يتم زيادة العداد في المثال الثاني. قبل العبارة التالية وليس التي تليها.
أخطاء شائعة في حلقات التكرار اللانهائية (while loops)
أربعة أخطاء مسؤولة عن كل حالات فشل حلقة while تقريباً.
- لا يتم تحديث العداد مطلقاً. يؤدي نسيان الزيادة إلى بقاء الشرط صحيحًا بشكل دائم. اضغط على مفتاح Esc في RStudio، أو Ctrl+C في الطرفية، للمقاطعة.
- تُرجع هذه الحالة قيمة غير متاحة (NA). إذا كانت أي قيمة في الاختبار غير متاحة (NA)، يتوقف برنامج R مع ظهور رسالة "قيمة مفقودة حيث يلزم وجود TRUE/FALSE". يمكنك التحقق من ذلك باستخدام الدالة is.na() أو الدالة isTRUE().
- الشرط أطول من عنصر واحد. منذ الإصدار R 4.2، يُعتبر الشرط الذي يزيد طوله عن واحد خطأً وليس تحذيراً. لذا، قم بتضمينه في الدالة any() أو all().
- مقارنة الأعداد العشرية لا تصبح خاطئة أبدًا. يمكن أن تستمر حلقة while (x != 0.3) إلى ما لا نهاية لأن 0.1 + 0.2 لا يساوي 0.3 بالضبط. قارن باستخدام قيمة التسامح، باستخدام abs(x – 0.3) > 1e-8.
# Safety valve: cap the number of iterations iter <- 0 while (price > 45 && iter < 1000) { price <- stock + sample(-10:10, 1) iter <- iter + 1 }
إن إضافة حد أقصى لعدد التكرارات هو بمثابة تأمين رخيص في أي حلقة يعتمد خروجها على بيانات عشوائية أو خارجية.
