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

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert