Nasıl düzeltilir: colmeans(x, na.rm = true) hatası: 'x' sayısal olmalıdır
R’yi kullanırken karşılaşabileceğiniz bir hata mesajı:
Error in colMeans(x, na.rm = TRUE): 'x' must be numeric
Bu hata genellikle R’de temel bileşen analizini gerçekleştirmek için prcomp() işlevini kullanmaya çalıştığınızda, kullandığınız veri çerçevesindeki bir veya daha fazla sütun sayısal olmadığında ortaya çıkar.
Bu hataya geçici bir çözüm bulmanın iki yolu vardır:
Yöntem 1: Sayısal olmayan sütunları sayısal sütunlara dönüştürme
Yöntem 2: Sayısal olmayan sütunları veri çerçevesinden kaldırın
Aşağıdaki örnekler her yöntemin pratikte nasıl kullanılacağını göstermektedir.
Hata nasıl yeniden oluşturulur?
Bir karakter sütunu içeren aşağıdaki veri çerçevesinde temel bileşen analizi yapmaya çalıştığımızı varsayalım:
#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
Takım sütunu, prcomp() işlevini kullanmaya çalışırken hataya neden olan bir karakter sütunudur.
Yöntem 1: Sayısal olmayan sütunları sayısal sütunlara dönüştürme
Bu hatayı önlemenin bir yolu , prcomp() işlevini kullanmadan önce takım sütununu sayısal bir sütuna dönüştürmektir:
#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
Bu sefer herhangi bir hata almıyoruz çünkü veri çerçevesindeki her sütun sayısaldır.
Yöntem 2: Sayısal olmayan sütunları veri çerçevesinden kaldırın
Hatayı önlemenin başka bir yolu da prcomp() işlevini kullanmadan önce sayısal olmayan tüm sütunları veri çerçevesinden kaldırmaktır :
#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
Yine veri çerçevesindeki her sütun sayısal olduğundan herhangi bir hata almıyoruz.
Not : Çoğu durumda ilk yöntem tercih edilen çözümdür çünkü belirli sütunları kaldırmak yerine tüm verileri kullanır.
Ek kaynaklar
Aşağıdaki eğitimlerde R’deki diğer yaygın hataların nasıl düzeltileceği açıklanmaktadır:
R’de nasıl düzeltilir: bağımsız değişkenler farklı sayıda satır içerir
R’de nasıl düzeltilir: kullanılmayan bağımsız değişkenlerin seçiminde hata
R’de nasıl onarılır: değiştirmenin uzunluğu sıfırdır