Как исправить в 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) должен иметь положительную длину
Как исправить: ошибка при выборе неиспользуемых аргументов