Как исправить: более длинная длина объекта не кратна более короткой длине объекта


Одно распространенное предупреждающее сообщение, с которым вы можете столкнуться в R:

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

Это предупреждающее сообщение появляется, когда вы пытаетесь выполнить какую-либо операцию над двумя или более векторами разной длины.

В этом руководстве представлены точные шаги, которые вы можете использовать для устранения этого предупреждающего сообщения.

Как воспроизвести предупреждающее сообщение

Предположим, мы добавляем значения следующих двух векторов в 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

Результирующий вектор показывает сумму соответствующих значений в каждом векторе.

Мы не получили предупреждающего сообщения, потому что два вектора имеют одинаковую длину.

Однако предположим, что второй вектор имеет на единицу меньшее значение, чем первое значение:

#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

Поскольку два вектора имеют разную длину, мы получаем сообщение о том, что более длинная длина объекта не кратна более короткой длине объекта .

Важно отметить, что R по-прежнему заставляет вычисления работать, добавляя последнее значение первого вектора (5) к первому значению второго вектора (6), чтобы получить окончательное значение 11 .

Если мы не знаем длину каждого вектора, мы можем использовать функцию length() , чтобы узнать:

#display length of vector a
length(a)

[1] 5

#display length of vector b
length(b)

[1] 4

Мы видим, что первый вектор имеет 5 значений, а второй вектор имеет только 4 значения. Вот почему мы получаем предупреждающее сообщение.

Как исправить предупреждающее сообщение

Чтобы исправить это предупреждающее сообщение, нам просто нужно убедиться, что оба вектора имеют одинаковую длину.

Например, если мы знаем, что вектор b имеет на одно значение меньше, чем вектор a, то мы можем просто добавить ноль в конец вектора 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

В большинстве случаев мы фактически не знаем разницу в длинах между двумя векторами, поэтому мы можем использовать следующий цикл for, чтобы добавить правильное количество нулей в конец более короткого вектора:

#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

Предупреждающее сообщение исчезает, потому что мы добавили достаточное количество нулей в конец вектора b, чтобы гарантировать, что оба вектора имеют одинаковую длину.

Дополнительные ресурсы

В следующих руководствах объясняется, как устранять другие распространенные ошибки в R:

Как исправить в R: имена не совпадают с предыдущими именами
Как исправить в R: NA, представленные Coercion
Как исправить в R: нижний индекс выходит за пределы
Как исправить в R: контрасты могут применяться только к факторам с 2 или более уровнями

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.