Oplossing: een langere objectlengte is geen veelvoud van een kortere objectlengte


Een veelvoorkomend waarschuwingsbericht dat u in R kunt tegenkomen is:

 Warning message:
In a + b: longer object length is not a multiple of shorter object length

Dit waarschuwingsbericht verschijnt wanneer u probeert een bewerking uit te voeren op twee of meer vectoren die niet dezelfde lengte hebben.

In deze zelfstudie worden de exacte stappen beschreven die u kunt gebruiken om dit waarschuwingsbericht op te lossen.

Hoe het waarschuwingsbericht te reproduceren

Stel dat we de waarden van de volgende twee vectoren in R optellen:

 #define two vectors
a <- c(1, 2, 3, 4, 5)
b <- c(6, 7, 8, 9, 10)

#add the two vectors
a+b

[1] 7 9 11 13 15

De resulterende vector toont de som van de overeenkomstige waarden in elke vector.

We hebben geen waarschuwingsberichten ontvangen omdat de twee vectoren dezelfde lengte hebben.

Stel echter dat de tweede vector een waarde minder heeft dan de eerste:

 #define two vectors
a <- c(1, 2, 3, 4, 5)
b <- c(6, 7, 8, 9)

#add the two vectors
a+b

[1] 7 9 11 13 11

Warning message:
In a + b: longer object length is not a multiple of shorter object length

Omdat de twee vectoren verschillende lengtes hebben, verkrijgen we dat de langere objectlengte geen veelvoud is van het waarschuwingsbericht voor de kortere objectlengte .

Het is belangrijk op te merken dat R de berekening altijd laat werken door de laatste waarde van de eerste vector (5) op te tellen bij de eerste waarde van de tweede vector (6) om de uiteindelijke waarde van 11 te krijgen.

Als we de lengte van elke vector niet weten, kunnen we de functie length() gebruiken om erachter te komen:

 #display length of vector a
length(a)

[1] 5

#display length of vector b
length(b)

[1] 4

We zien dat de eerste vector 5 waarden heeft, terwijl de tweede vector slechts 4 waarden heeft. Daarom ontvangen wij een waarschuwingsbericht.

Hoe u het waarschuwingsbericht kunt oplossen

Om dit waarschuwingsbericht op te lossen, hoeven we er alleen maar voor te zorgen dat beide vectoren dezelfde lengte hebben.

Als we bijvoorbeeld weten dat vector ba één waarde minder is dan vector a, dan kunnen we eenvoudigweg een nul toevoegen aan het einde van vector b :

 #define two vectors
a <- c(1, 2, 3, 4, 5)
b <- c(6, 7, 8, 9)

#add zero to the end of vector b
b <- c(b, 0)

#add the two vectors
a+b

[1] 7 9 11 13 5

In de meeste gevallen weten we het lengteverschil tussen de twee vectoren niet, dus kunnen we de volgende for-lus gebruiken om het juiste aantal nullen aan het einde van de kortere vector toe te voegen:

 #define two vectors
a <- c(1, 2, 3, 4, 5)
b <- c(6, 7)

#add zeros to the end of vector b
for (i in (( length (b)+1): length (a)))
  +{b = c(b, 0)}

#add the two vectors
a+b

[1] 7 9 11 13 5

Het waarschuwingsbericht verdwijnt omdat we voldoende nullen aan het einde van vector b hebben toegevoegd om ervoor te zorgen dat de twee vectoren dezelfde lengte hebben.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in R kunt oplossen:

Oplossing in R: namen komen niet overeen met eerdere namen
Hoe op te lossen in R: NA’s geïntroduceerd door dwang
Hoe te repareren in R: index buiten bereik
Hoe op te lossen in R: contrasten kunnen alleen worden toegepast op factoren met 2 of meer niveaus

Einen Kommentar hinzufügen

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