كيفية الإصلاح في r: الشرط له طول> 1 وسيتم استخدام العنصر الأول فقط
الخطأ الذي قد تواجهه في R هو:
Warning message: In if (x > 1) {: the condition has length > 1 and only the first element will be used
يحدث هذا الخطأ عندما تحاول استخدام دالة if() للتحقق من شرط ما، لكنك تقوم بتمرير متجه إلى الدالة if() بدلاً من العناصر الفردية.
يشرح هذا البرنامج التعليمي بالضبط كيفية إصلاح هذا الخطأ.
كيفية إعادة إنتاج الخطأ
لنفترض أن لدينا المتجه التالي في R:
#define data
x <- c(2, 3, 1, 1, 5, 7)
لنفترض الآن أننا نحاول استخدام دالة if() للتحقق مما إذا كانت كل قيمة للمتجه x أكبر من 1، ثم نضرب تلك القيم في 2:
#if value in vector x is greater than 1, multiply it by 2
if (x>1) {
x*2
}
Warning message:
In if (x > 1) {:
the condition has length > 1 and only the first element will be used
نتلقى رسالة تحذير لأننا مررنا متجهًا إلى عبارة if() .
يمكن لعبارة if() التحقق من عنصر واحد فقط من المتجه في كل مرة، ولكن باستخدام هذا الكود حاولنا التحقق من كل عنصر من عناصر المتجه في المرة الواحدة.
كيفية اصلاح الخطأ
أسهل طريقة لإصلاح هذا الخطأ هي استخدام دالة ifelse() بدلاً من ذلك:
#if value in vector x is greater than 1, multiply it by 2
ifelse(x>1, x*2, x)
[1] 4 6 1 1 10 14
بشكل افتراضي، تقوم الدالة ifelse() بالتحقق من كل عنصر من عناصر المتجه واحدًا تلو الآخر. وهذا يسمح لنا بتجنب الخطأ الذي واجهناه سابقًا.
إليك كيفية قيام الدالة ifelse() بإنتاج قيم الإخراج التي أنتجتها:
- العنصر الأول (2) كان أكبر من 1، لذلك ضربناه في 2 لنحصل على 2*2 = 4
- العنصر الثاني (3) كان أكبر من 1، لذلك ضربناه في 2 لنحصل على 3*2 = 6
- العنصر الثالث (1) لم يكن أكبر من 1، لذلك تركناه كما هو: 1
- العنصر الرابع (1) لم يكن أكبر من 1، لذلك تركناه كما هو: 1
وما إلى ذلك وهلم جرا.
ذات صلة: كيفية كتابة حلقة متداخلة في R
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية حل الأخطاء الشائعة الأخرى في R:
كيفية الإصلاح في R: NAs التي تم تقديمها عن طريق الإكراه
كيفية الإصلاح في R: dim(X) يجب أن يكون له طول موجب
كيفية الإصلاح في R: الأسماء لا تتطابق مع الأسماء السابقة
كيفية الإصلاح في R: طول الكائن الأطول ليس مضاعفًا لطول الكائن الأقصر
كيفية الإصلاح في R: لا يمكن تطبيق التباينات إلا على العوامل ذات المستويين أو أكثر