Jak naprawić: dłuższa długość obiektu nie jest wielokrotnością krótszej długości obiektu


Typowym komunikatem ostrzegawczym, który możesz napotkać w R, jest:

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

Ten komunikat ostrzegawczy pojawia się w przypadku próby wykonania operacji na dwóch lub większej liczbie wektorów o różnej długości.

W tym samouczku przedstawiono dokładne kroki, które można wykonać, aby rozwiązać ten komunikat ostrzegawczy.

Jak odtworzyć komunikat ostrzegawczy

Załóżmy, że dodajemy wartości następujących dwóch wektorów w 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

Wynikowy wektor pokazuje sumę odpowiednich wartości w każdym wektorze.

Nie otrzymaliśmy żadnych komunikatów ostrzegawczych, ponieważ oba wektory mają tę samą długość.

Załóżmy jednak, że drugi wektor ma o jedną wartość mniej niż pierwszy:

 #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

Ponieważ te dwa wektory mają różną długość, otrzymujemy, że dłuższa długość obiektu nie jest wielokrotnością komunikatu ostrzegawczego o krótszej długości obiektu .

Należy zauważyć, że R zawsze wymusza wykonanie obliczeń poprzez dodanie ostatniej wartości pierwszego wektora (5) do pierwszej wartości drugiego wektora (6), aby otrzymać ostateczną wartość 11 .

Jeśli nie znamy długości każdego wektora, możemy użyć funkcji długości() , aby się dowiedzieć:

 #display length of vector a
length(a)

[1] 5

#display length of vector b
length(b)

[1] 4

Widzimy, że pierwszy wektor ma 5 wartości, podczas gdy drugi wektor ma tylko 4 wartości. Dlatego otrzymujemy komunikat ostrzegawczy.

Jak naprawić komunikat ostrzegawczy

Aby naprawić ten komunikat ostrzegawczy, musimy po prostu upewnić się, że oba wektory mają tę samą długość.

Na przykład, jeśli wiemy, że wektor ba jest o jedną wartość mniejszy niż wektor a, możemy po prostu dodać zero na końcu wektora 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

W większości przypadków tak naprawdę nie znamy różnicy długości między dwoma wektorami, więc możemy użyć poniższej pętli for , aby dodać poprawną liczbę zer na końcu krótszego wektora:

 #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

Komunikat ostrzegawczy znika, ponieważ dodaliśmy wystarczającą liczbę zer na końcu wektora b, aby mieć pewność, że oba wektory mają tę samą długość.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak rozwiązać inne typowe błędy w języku R:

Jak naprawić w R: Nazwy nie pasują do poprzednich nazw
Jak naprawić w R: NA wprowadzone przez przymus
Jak naprawić w R: indeks poza zakresem
Jak naprawić w R: kontrasty można zastosować tylko do czynników o 2 lub więcej poziomach

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *