Hoe het probleem op te lossen: probeer "kolomnamen" in te stellen; op een object met minder dan twee dimensies


Een foutmelding die u kunt tegenkomen bij het gebruik van R is:

 Error in `colnames<-`(`*tmp*`, value = c("var1", "var2", "var3")): 
  attempt to set 'colnames' on an object with less than two dimensions

Deze fout treedt meestal op wanneer u probeert de functie colnames() te gebruiken om kolomnamen in te stellen voor een object dat geen gegevensframe of matrix is.

Het volgende voorbeeld laat zien hoe u deze fout in de praktijk kunt oplossen.

Hoe de fout te reproduceren

Stel dat we het volgende dataframe in R hebben:

 #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

Stel nu dat we proberen een nieuwe regel toe te voegen aan het einde van het dataframe:

 #define new row to add to end of data frame
new_row <- c('D', 15, 11)

#attempt to define column names for new row
colnames(new_row) <- colnames(df)

Error in `colnames<-`(`*tmp*`, value = c("team", "points", "rebounds")): 
  attempt to set 'colnames' on an object with less than two dimensions

We ontvangen een foutmelding omdat we de functie colnames() op een vector hebben gebruikt in plaats van op een dataframe of matrix.

Hoe u de fout kunt oplossen

Om deze fout te voorkomen, moeten we ervoor zorgen dat we de functie colnames() gebruiken met een dataframe:

We kunnen bijvoorbeeld de volgende code gebruiken om een nieuwe regel aan het einde van het dataframe toe te voegen

 #define new row to add to end of data frame
new_row <- data. frame ('D', 15, 11)

#define column names for new row
colnames(new_row) <- colnames(df)

#add new row to end of data frame
df <- rbind(df, new_row)

#view updated 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
10 D 15 11

Deze keer ontvangen we geen fouten omdat we de functie colnames() hebben gebruikt om de kolomnamen van een dataframe in te stellen in plaats van een vector.

We kunnen dan met succes rbind() gebruiken om de nieuwe regel aan het einde van het bestaande dataframe te binden.

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