Як виправити: більша довжина об’єкта не є кратною меншій довжині об’єкта


Типове попередження, яке ви можете зустріти в 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: NAs, введені примусово
Як відремонтувати в R: індекс поза межами
Як виправити в R: контрасти можна застосовувати лише до факторів із 2 або більше рівнями

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *