كيفية الإصلاح في r: الاستبدال له طول صفر
الخطأ الذي قد تواجهه في R هو:
Error in x[1] = x[0]: replacement has length zero
يحدث هذا الخطأ عندما تحاول استبدال قيمة في متجه بقيمة أخرى “ليس لها طول صفر”، مما يعني أنها غير موجودة.
يشرح هذا البرنامج التعليمي بالضبط كيفية إصلاح هذا الخطأ.
كيفية إعادة إنتاج الخطأ
لنفترض أننا أنشأنا المتجه التالي بـ 10 قيم في R:
data = c(1, 4, 5, 5, 7, 9, 12, 14, 15, 17)
لنفترض الآن أننا نحاول استخدام حلقة for() التالية لضرب كل قيمة في المتجه بالقيمة التي تسبقه:
for (i in 1: length (data)) {
data[i] = data[i] * data[i-1]
}
Error in data[i] <- data[i] * data[i - 1]: replacement has length zero
نتلقى الخطأ ” الاستبدال له طول صفر ” لأنه في الحلقة الأولى نحاول إجراء الضرب التالي:
- البيانات[1] * البيانات[0]
وبما أن فهارس R تبدأ عند 1، فإن قيمة البيانات [0] ببساطة غير موجودة.
يمكننا التحقق من ذلك من خلال محاولة طباعة القيمة الموجودة في الموضع 0 في المتجه:
print (data[0])
numeric(0)
والنتيجة هي متجه رقمي بطول 0 – وبعبارة أخرى، فهو غير موجود.
كيفية إصلاح الخطأ
طريقة إصلاح هذا الخطأ هي ببساطة استخدام حلقة for() التي لا تحاول الوصول إلى قيمة المتجه غير الموجودة.
في مثالنا، يمكننا تصحيح هذا الخطأ عن طريق بدء حلقة for عند موضع الفهرس 2 بدلاً من الموضع 1:
for (i in 2: length (data)) {
data[i] = data[i] * data[i-1]
}
#view updated vector
data
[1] 1 4 20 100 700 6300 75600
[8] 1058400 15876000 269892000
لاحظ أننا لا نتلقى أي خطأ لأننا لم نحاول مطلقًا الوصول إلى موضع فهرس غير موجود في المتجه.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية إصلاح الأخطاء الشائعة الأخرى في R:
كيفية الإصلاح: الشرط له طول > 1 وسيتم استخدام العنصر الأول فقط
كيفية الإصلاح: الاستبدال يحتوي على خطوط X، والبيانات تحتوي على Y
كيفية الإصلاح: الوسيطة غير الرقمية للمشغل الثنائي
كيفية الإصلاح: يجب أن يكون لـ dim(X) طول موجب
كيفية الإصلاح: خطأ في اختيار الوسائط غير المستخدمة