Как исправить в 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 и будет использоваться только первый элемент
Как исправить: замена имеет X строк, данные имеют Y
Как исправить: нечисловой аргумент бинарного оператора
Как исправить: dim(X) должен иметь положительную длину
Как исправить: ошибка при выборе неиспользуемых аргументов

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