Como reparar em r: a substituição tem comprimento zero
Um erro que você pode encontrar no R é:
Error in x[1] = x[0]: replacement has length zero
Este erro ocorre quando você tenta substituir um valor em um vetor por outro valor que “tem comprimento zero”, o que significa que ele não existe.
Este tutorial explica exatamente como corrigir esse erro.
Como reproduzir o erro
Suponha que criemos o seguinte vetor com 10 valores em R:
data = c(1, 4, 5, 5, 7, 9, 12, 14, 15, 17)
Agora suponha que tentamos usar o seguinte loop for() para multiplicar cada valor no vetor pelo valor anterior:
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
Recebemos o erro ” a substituição tem comprimento zero ” porque no primeiro loop tentamos realizar a seguinte multiplicação:
- dados[1] * dados[0]
Como os índices R começam em 1, o valor data[0] simplesmente não existe.
Podemos verificar isso tentando imprimir o valor localizado na posição 0 do vetor:
print (data[0])
numeric(0)
O resultado é um vetor digital de comprimento 0 – em outras palavras, ele não existe.
Como corrigir o erro
A maneira de corrigir esse erro é simplesmente usar um loop for() que não tente acessar um valor do vetor que não existe.
Em nosso exemplo, poderíamos corrigir esse erro iniciando o loop for na posição 2 do índice em vez da posição 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
Observe que não estamos recebendo um erro porque nunca tentamos acessar uma posição de índice no vetor que não existe.
Recursos adicionais
Os tutoriais a seguir explicam como corrigir outros erros comuns no R:
Como corrigir: a condição tem comprimento > 1 e apenas o primeiro elemento será usado
Como corrigir: a substituição tem X linhas, os dados têm Y
Como corrigir: argumento não numérico do operador binário
Como corrigir: dim(X) deve ter um comprimento positivo
Como corrigir: erro ao selecionar argumentos não utilizados