web-dev-qa-db-fra.com

R Error: names () appliqué à un non-vecteur

J'ai un morceau de code qui produit une erreur seulement la première fois que je l'exécute. Étrangement, si je le lance une seconde fois, je n’ai aucune erreur (définition de folie?). De plus, l'erreur ne s'affiche pas toujours à la même position. Cela signifie que si j'ajoute quelques lignes de commentaires, le message d'erreur est imprimé après les commentaires et non après une instruction spécifique. 

Je ne peux pas donner d’exemple reproductible car je ne sais pas d’où vient exactement l’erreur. L'erreur est la suivante:

Error in names(frame)[names(frame) == "x"] <- name : 
  names() applied to a non-vector

Je devrais spécifier que dans mon code je n'ai pas - au moins explicitement- une fonction names()

14
Manfredo

C'est une erreur délicate. J'ai été capable de localiser la raison et il semble que R ait un objet du même nom que la fonction mise en cache. Ceci est le plus probable si vous utilisez un IDE tel que RStudio, un onglet pour View (df). Sauf si l'onglet est fermé, même si vous exécutez la fonction sans code, vous obtiendrez cette erreur. De même, si l'onglet n'est pas fermé, même la suppression de tous les objets ou la récupération de place ne le résoudra pas. Une fois l'onglet fermé, l'erreur disparaîtra.

J'ai eu la même erreur, et c'était une faute sur une fonction particulière que j'ai écrite. Il renvoyait l'erreur à chaque fois que je chargeais la fonction, même lorsque je commentais tout le code de la fonction. J'ai trouvé que changer le nom de la variable de ma fonction a arrêté l'erreur. Ma seule hypothèse est qu'il existe un conflit étrange entre les noms de variables.

2
JMT2080AD

J'ai eu la même erreur. La raison en est quelque chose liée à un fichier que j’avais sauvegardé il y a longtemps avec le nom "df", qui interfère avec une variable courante, également appelée df.

La solution est toutefois directe: recherchez la ligne problématique en exécutant la première ligne du code, puis en effaçant l'environnement global et en l'exécutant à nouveau. Si aucune erreur ne se produit, ajoutez la ligne suivante et ainsi de suite jusqu'à ce que l'erreur se produise. Ensuite, modifiez le nom de la variable dans cette ligne.

0
Rudi Mueller

Même j'ai eu la même erreur. La raison dans mon cas était qu'il y avait un autre bloc de données portant le même nom que la fonction à l'intérieur de la fonction. J'imagine que R renvoie cette erreur lorsqu'il y a aussi une incompatibilité de type. Dans mon cas, le nom a d'abord été lu en tant que fonction. Lorsque R retrouvait le même nom, il cherchait une fonction mais trouvait plutôt un cadre de données. 

Tout ce que j'avais à faire était de changer le nom de l'un d'entre eux et l'erreur avait disparu.

0
Abhijith