Lösung: eine längere objektlänge ist kein vielfaches der kürzeren objektlänge
Eine häufige Warnmeldung, die in R auftreten kann, ist:
Warning message: In a + b: longer object length is not a multiple of shorter object length
Diese Warnmeldung wird angezeigt, wenn Sie versuchen, eine Operation an zwei oder mehr Vektoren durchzuführen, die nicht die gleiche Länge haben.
In diesem Tutorial werden die genauen Schritte erläutert, mit denen Sie diese Warnmeldung beheben können.
So reproduzieren Sie die Warnmeldung
Angenommen, wir addieren die Werte der folgenden zwei Vektoren in R:
#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
Der resultierende Vektor zeigt die Summe der entsprechenden Werte in jedem Vektor.
Wir haben keine Warnmeldungen erhalten, da die beiden Vektoren gleich lang sind.
Nehmen wir jedoch an, dass der zweite Vektor einen Wert weniger hat als der erste:
#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
Da die beiden Vektoren unterschiedliche Längen haben, erhalten wir, dass die längere Objektlänge kein Vielfaches der Warnmeldung für die kürzere Objektlänge ist .
Es ist wichtig zu beachten, dass R die Berechnung immer zum Funktionieren bringt, indem der letzte Wert des ersten Vektors (5) mit dem ersten Wert des zweiten Vektors (6) addiert wird, um den Endwert 11 zu erhalten.
Wenn wir die Länge jedes Vektors nicht kennen, können wir die Funktion length() verwenden, um Folgendes herauszufinden:
#display length of vector a length(a) [1] 5 #display length of vector b length(b) [1] 4
Wir sehen, dass der erste Vektor 5 Werte hat, während der zweite Vektor nur 4 Werte hat. Aus diesem Grund erhalten wir eine Warnmeldung.
So beheben Sie die Warnmeldung
Um diese Warnmeldung zu beheben, müssen wir lediglich sicherstellen, dass beide Vektoren die gleiche Länge haben.
Wenn wir beispielsweise wissen, dass der Vektor ba einen Wert kleiner als der Vektor a ist, können wir einfach eine Null am Ende des Vektors b hinzufügen :
#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 den meisten Fällen kennen wir den Längenunterschied zwischen den beiden Vektoren nicht wirklich, daher können wir die folgende for-Schleife verwenden, um die richtige Anzahl von Nullen am Ende des kürzeren Vektors hinzuzufügen:
#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
Die Warnmeldung verschwindet, weil wir am Ende von Vektor b genügend Nullen hinzugefügt haben, um sicherzustellen, dass die beiden Vektoren die gleiche Länge haben.
Zusätzliche Ressourcen
Die folgenden Tutorials erklären, wie Sie andere häufige Fehler in R beheben können:
So beheben Sie das Problem in R: Namen stimmen nicht mit vorherigen Namen überein
So beheben Sie in R: NAs, die durch Zwang eingeführt wurden
So reparieren Sie in R: Index außerhalb der Grenzen
So korrigieren Sie in R: Kontraste können nur auf Faktoren mit 2 oder mehr Ebenen angewendet werden