R أثناء الحلقة مع أمثلة البرمجة

⚡ ملخص ذكي

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

  • 🔁 بناء الجملة الأساسي: بينما (الشرط) { التعبير } يختبر الشرط أولاً وينفذ الجسم فقط عندما يتم تقييمه إلى صحيح.
  • ⚠️ قاعدة الإنهاء: يجب أن يغير أحد العبارات داخل جسم البرنامج الشرط، وإلا فلن تنتهي الحلقة أبدًا.
  • 🔢 نمط معاكس: قم بتهيئة متغير قبل الحلقة وقم بزيادته داخلها، وهو أسلوب العد القياسي.
  • 🛑 التحكم في التدفق: يخرج الأمر break من الحلقة فوراً، وينتقل الأمر next إلى التكرار التالي.
  • 🔁 كرر البديل: يتم تنفيذ التكرار بشكل غير مشروط ويعتمد كليًا على الاستراحة، وهو ما يناسب منطق نمط do-while.
  • 📐 متى تختار: استخدم while عندما يكون عدد التكرارات غير معروف مسبقًا، واستخدم for عندما يكون ثابتًا.

أثناء الحلقة في R

أثناء حلقة في برمجة R

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

أثناء بناء جملة الحلقة في R

فيما يلي بناء الجملة لحلقة While في برمجة R:

while (condition) {
     Exp	
}

R أثناء مخطط انسيابي للحلقة

R أثناء مخطط انسيابي للحلقة
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
}

إن إضافة حد أقصى لعدد التكرارات هو بمثابة تأمين رخيص في أي حلقة يعتمد خروجها على بيانات عشوائية أو خارجية.

الأسئلة الشائعة

تختبر حلقة while شرطها قبل المرور الأول، لذا يمكن ألا تُنفذ أي مرة. أما حلقة repeat فلا تحتوي على شرط وتُنفذ دائمًا مرة واحدة على الأقل، ولا تتوقف إلا عند الوصول إلى عبارة break.

اضغط على زر Esc في RStudio أو Ctrl+C في الطرفية لإيقاف التنفيذ. يمكنك منع حدوث ذلك عن طريق التأكد من أن أحد العبارات داخل جسم البرنامج يُغير الشرط، وإضافة عداد أقصى للتكرارات.

استخدم حلقة while عندما يعتمد عدد التكرارات على نتيجة محسوبة داخل الحلقة، مثل انتظار قيمة تتجاوز عتبة معينة. استخدم حلقة for عندما يكون التسلسل معروفًا قبل بدء الحلقة.

تعمل الخوارزميات التكرارية مثل انحدار التدرج، و k-means، و توقع الحد الأقصى حتى التقارب بدلاً من عدد ثابت، وهو بالضبط نمط while.

نعم. يمكن للمساعدين المدعومين بالذكاء الاصطناعي اكتشاف تحديث عداد مفقود أو حالة لا يمكن أن تتحول إلى خطأ. أضف دائمًا عبارة طباعة أو حدًا للتكرار لتأكيد التشخيص على بياناتك الخاصة.

تلخيص هذه التدوينة بـ: