كيفية الإصلاح: خطأ في colmeans(x, na.rm = true): يجب أن يكون 'x' رقميًا
رسالة الخطأ التي قد تواجهها عند استخدام R هي:
Error in colMeans(x, na.rm = TRUE): 'x' must be numeric
يحدث هذا الخطأ عادةً عند محاولة استخدام الدالة prcomp() لإجراء تحليل المكون الرئيسي في R ، عندما لا يكون عمود واحد أو أكثر في إطار البيانات الذي تستخدمه رقميًا.
هناك طريقتان للتغلب على هذا الخطأ:
الطريقة الأولى: تحويل الأعمدة غير الرقمية إلى أعمدة رقمية
الطريقة الثانية: إزالة الأعمدة غير الرقمية من إطار البيانات
توضح الأمثلة التالية كيفية استخدام كل طريقة عمليًا.
كيفية إعادة إنتاج الخطأ
لنفترض أننا نحاول إجراء تحليل المكون الرئيسي في إطار البيانات التالي الذي يحتوي على عمود من الأحرف:
#create data frame
df <- data. frame (team=c('A', 'A', 'C', 'B', 'C', 'B', 'B', 'C', 'A'),
points=c(12, 8, 26, 25, 38, 30, 24, 24, 15),
rebounds=c(10, 4, 5, 5, 4, 3, 8, 18, 22))
#view data frame
df
team points rebounds
1 to 12 10
2 to 8 4
3 C 26 5
4 B 25 5
5 C 38 4
6 B 30 3
7 B 24 8
8 C 24 18
9 to 15 22
#attempt to calculate principal components
prcomp(df)
Error in colMeans(x, na.rm = TRUE): 'x' must be numeric
عمود الفريق هو عمود حرف، مما يؤدي إلى حدوث خطأ عند محاولة استخدام الدالة prcomp() .
الطريقة الأولى: تحويل الأعمدة غير الرقمية إلى أعمدة رقمية
إحدى الطرق لتجنب هذا الخطأ هي تحويل عمود الفريق إلى عمود رقمي قبل استخدام الدالة prcomp() :
#convert character column to numeric
df$team <- as. numeric (as. factor (df$team))
#view updated data frame
df
team points rebounds
1 1 12 10
2 1 8 4
3 3 26 5
4 2 25 5
5 3 38 4
6 2 30 3
7 2 24 8
8 3 24 18
9 1 15 22
#calculate main components
prcomp(df)
Standard deviations (1, .., p=3):
[1] 9.8252704 6.0990235 0.4880538
Rotation (nxk) = (3 x 3):
PC1 PC2 PC3
team -0.06810285 0.04199272 0.99679417
points -0.91850806 0.38741460 -0.07907512
rebounds 0.38949319 0.92094872 -0.01218661
هذه المرة لا نتلقى أي أخطاء لأن كل عمود في إطار البيانات رقمي.
الطريقة الثانية: إزالة الأعمدة غير الرقمية من إطار البيانات
هناك طريقة أخرى لتجنب الخطأ وهي إزالة كافة الأعمدة غير الرقمية من إطار البيانات قبل استخدام الدالة prcomp() :
#remove non-numeric columns from data frame
df_new <- df[ , unlist(lapply(df, is. numeric ))]
#view new data frame
df_new
rebound points
1 12 10
2 8 4
3 26 5
4 25 5
5 38 4
6 30 3
7 24 8
8 24 18
9 15 22
#calculate main components
prcomp(df_new)
Standard deviations (1, .., p=2):
[1] 9.802541 6.093638
Rotation (nxk) = (2 x 2):
PC1 PC2
points 0.9199431 0.3920519
rebounds -0.3920519 0.9199431
مرة أخرى، لا نتلقى أي أخطاء لأن كل عمود في إطار البيانات رقمي.
ملاحظة : في معظم الحالات، تكون الطريقة الأولى هي الحل المفضل لأنها تستخدم كافة البيانات بدلاً من إزالة أعمدة معينة.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية إصلاح الأخطاء الشائعة الأخرى في R:
كيفية الإصلاح في R: تتضمن الوسائط عددًا مختلفًا من الأسطر
كيفية الإصلاح في R: خطأ في اختيار الوسائط غير المستخدمة
كيفية الإصلاح في R: الاستبدال له طول صفر