Как исправить: ошибка в 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
Столбец команды представляет собой символьный столбец, что приводит к ошибке при попытке использовать функцию 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: замена имеет нулевую длину