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


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

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

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

Например, если мы знаем, что вектор ba на одно значение меньше вектора 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, введенные принудительно
Как восстановить в R: индекс выходит за пределы
Как исправить в R: контрасты можно применять только к факторам с 2 и более уровнями

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *