Oplossing: fout in colmeans(x, na.rm = true): 'x' moet numeriek zijn
Een foutmelding die u kunt tegenkomen bij het gebruik van R is:
Error in colMeans(x, na.rm = TRUE): 'x' must be numeric
Deze fout treedt meestal op wanneer u probeert de functie pcomp() te gebruiken om hoofdcomponentanalyse uit te voeren in R , terwijl een of meer kolommen in het gegevensframe dat u gebruikt niet numeriek zijn.
Er zijn twee manieren om deze fout te omzeilen:
Methode 1: Converteer niet-numerieke kolommen naar numerieke kolommen
Methode 2: Verwijder niet-numerieke kolommen uit het dataframe
De volgende voorbeelden laten zien hoe u elke methode in de praktijk kunt gebruiken.
Hoe de fout te reproduceren
Stel dat we een hoofdcomponentenanalyse proberen uit te voeren op het volgende dataframe dat een kolom met tekens bevat:
#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
De teamkolom is een tekenkolom, die een fout veroorzaakt bij het gebruik van de functie pcomp() .
Methode 1: Converteer niet-numerieke kolommen naar numerieke kolommen
Eén manier om deze fout te voorkomen is door de teamkolom naar een numerieke kolom te converteren voordat u de functie pcomp() gebruikt:
#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
Deze keer ontvangen we geen fouten omdat elke kolom in het gegevensframe numeriek is.
Methode 2: Verwijder niet-numerieke kolommen uit het dataframe
Een andere manier om de fout te voorkomen is door eenvoudigweg alle niet-numerieke kolommen uit het dataframe te verwijderen voordat u de functie pcomp() gebruikt :
#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
Nogmaals, we ontvangen geen fouten omdat elke kolom in het gegevensframe numeriek is.
Opmerking : in de meeste gevallen verdient de eerste methode de voorkeur, omdat deze alle gegevens gebruikt in plaats van bepaalde kolommen te verwijderen.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in R kunt oplossen:
Hoe op te lossen in R: argumenten hebben betrekking op een verschillend aantal regels
Hoe op te lossen in R: fout bij het selecteren van ongebruikte argumenten
Hoe te repareren in R: vervanging heeft een lengte van nul