Як відремонтувати в r: заміна має нульову довжину
Помилка, з якою ви можете зіткнутися в R:
Error in x[1] = x[0]: replacement has length zero
Ця помилка виникає, коли ви намагаєтеся замінити значення у векторі іншим значенням, яке «має нульову довжину», тобто воно не існує.
Цей посібник пояснює, як саме виправити цю помилку.
Як відтворити помилку
Припустимо, ми створюємо наступний вектор з 10 значеннями в R:
data = c(1, 4, 5, 5, 7, 9, 12, 14, 15, 17)
Тепер припустімо, що ми спробуємо використати наступний цикл for() , щоб помножити кожне значення у векторі на значення перед ним:
for (i in 1: length (data)) {
data[i] = data[i] * data[i-1]
}
Error in data[i] <- data[i] * data[i - 1]: replacement has length zero
Ми отримуємо помилку « заміна має нульову довжину », тому що в першому циклі ми намагаємося виконати таке множення:
- дані[1] * дані[0]
Оскільки індекси R починаються з 1, значення data[0] просто не існує.
Ми можемо перевірити це, спробувавши надрукувати значення, розташоване в позиції 0 у векторі:
print (data[0])
numeric(0)
Результатом є цифровий вектор довжини 0 – іншими словами, його не існує.
Як виправити помилку
Щоб виправити цю помилку, просто використовуйте цикл for() , який не намагається отримати доступ до значення вектора, якого не існує.
У нашому прикладі ми могли б виправити цю помилку, запустивши цикл for з позиції індексу 2, а не з позиції 1:
for (i in 2: length (data)) {
data[i] = data[i] * data[i-1]
}
#view updated vector
data
[1] 1 4 20 100 700 6300 75600
[8] 1058400 15876000 269892000
Зверніть увагу, що ми не отримуємо повідомлення про помилку, оскільки ми ніколи не намагалися отримати доступ до позиції індексу у векторі, яка не існує.
Додаткові ресурси
У наступних посібниках пояснюється, як виправити інші типові помилки в R:
Як виправити: умова має довжину > 1 і використовуватиметься лише перший елемент
Як виправити: Replace містить X рядків, дані мають Y
Як виправити: нечисловий аргумент двійкового оператора
Як виправити: dim(X) має мати додатну довжину
Як виправити: помилка під час вибору невикористаних аргументів