Comment réparer dans R : le remplacement a une longueur nulle
Une erreur que vous pouvez rencontrer dans R est :
Error in x[1] = x[0] : replacement has length zero
Cette erreur se produit lorsque vous tentez de remplacer une valeur dans un vecteur par une autre valeur qui « a une longueur nulle », ce qui signifie qu’elle n’existe pas.
Ce didacticiel explique exactement comment corriger cette erreur.
Comment reproduire l’erreur
Supposons que nous créons le vecteur suivant avec 10 valeurs dans R :
data = c(1, 4, 5, 5, 7, 9, 12, 14, 15, 17)
Supposons maintenant que nous essayions d’utiliser la boucle for() suivante pour multiplier chaque valeur du vecteur par la valeur qui la précède :
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
Nous recevons l’erreur « le remplacement a une longueur nulle » car lors de la première boucle, nous tentons d’effectuer la multiplication suivante :
- données[1] * données[0]
Puisque les index R commencent à 1, la valeur data[0] n’existe tout simplement pas.
Nous pouvons le vérifier en tentant d’imprimer la valeur située à la position 0 dans le vecteur :
print(data[0])
numeric(0)
Le résultat est un vecteur numérique de longueur 0 – en d’autres termes, il n’existe pas.
Comment réparer l’erreur
La façon de corriger cette erreur consiste simplement à utiliser une boucle for() qui ne tente pas d’accéder à une valeur du vecteur qui n’existe pas.
Dans notre exemple, nous pourrions corriger cette erreur en démarrant la boucle for à la position d’index 2 plutôt qu’à la position 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
Notez que nous ne recevons pas d’erreur car nous n’avons jamais tenté d’accéder à une position d’index dans le vecteur qui n’existe pas.
Ressources additionnelles
Les didacticiels suivants expliquent comment corriger d’autres erreurs courantes dans R :
Comment réparer : la condition a une longueur > 1 et seul le premier élément sera utilisé
Comment réparer : le remplacement a X lignes, les données ont Y
Comment réparer : argument non numérique de l’opérateur binaire
Comment réparer : dim(X) doit avoir une longueur positive
Comment réparer : erreur dans la sélection des arguments inutilisés