Як виправити: помилка в colmeans(x, na.rm = true): 'x' має бути числовим
Повідомлення про помилку, яке може виникнути під час використання R:
Error in colMeans(x, na.rm = TRUE): 'x' must be numeric
Ця помилка зазвичай виникає, коли ви намагаєтеся використати функцію prcomp() для виконання аналізу головних компонентів у R , коли один або кілька стовпців у кадрі даних, який ви використовуєте, не є числовими.
Є два способи обійти цю помилку:
Спосіб 1. Перетворення нечислових стовпців на числові
Спосіб 2. Видалення нечислових стовпців із кадру даних
Наступні приклади показують, як використовувати кожен метод на практиці.
Як відтворити помилку
Припустімо, ми намагаємося виконати аналіз головних компонентів для наступного кадру даних, який містить стовпець символів:
#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
Стовпець team – це стовпець символів, який викликає помилку під час спроби використати функцію prcomp() .
Спосіб 1. Перетворення нечислових стовпців на числові
Один зі способів уникнути цієї помилки — перетворити стовпець команди на числовий стовпець перед використанням функції 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
Цього разу ми не отримуємо жодних помилок, оскільки кожен стовпець у кадрі даних є числовим.
Спосіб 2. Видалення нечислових стовпців із кадру даних
Ще один спосіб уникнути помилки — просто видалити всі нечислові стовпці з кадру даних перед використанням функції 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: заміна має нульову довжину