En fait, la question centrale est peut-être celle de l'utilité d'un type facteur dans un langage non-typé, puisque les facteurs vont forcément entrer en conflit avec les autres types de base. Il me semble tout à fait envisageable de laisser les fonctions transtyper en facteur quand elles en ont besoin (voire d'interpréter les strings comme des facteurs), alors que les routines de lecture/écriture/manipulation de données gèrent des chaines de caractères. Les problèmes de RAM sont évitables même avec les chaînes de caractère, c'est juste une histoire d'optimisation interne.
De toutes manières, l'auto-typage génère des bugs, c'est inévitable. Quand il y a une erreur de saisie triviale, style un "Na" au lieu de "NA", alors c'est toute la colonne de nombres qui devient facteur ou catactère; au contraire, on peut changer le type en appliquant un filtre (par exemple un grep \d+ sur une chaine de caractères, et pouf, le sous-jeu de données n'a pas le même type). Le plus vicieux, c'est un as.numeric sur une colonne interprétée comme un facteur, ce qui risque d'arriver de manière silencieuse avec du code écrit pour R-4.0 interprété par un R plus ancien: as.numeric(c("10","12")) donne c(10,12), alors que as.numeric(factor(c("10","12))) fait c(1,2). De bonnes soirées de débuggage poilu en perspective.
[^] # Re: Ma plus commune erreur
Posté par arnaudus . En réponse au journal Gnu R version 4.0.0 est disponible. Évalué à 2. Dernière modification le 29 avril 2020 à 17:33.
En fait, la question centrale est peut-être celle de l'utilité d'un type facteur dans un langage non-typé, puisque les facteurs vont forcément entrer en conflit avec les autres types de base. Il me semble tout à fait envisageable de laisser les fonctions transtyper en facteur quand elles en ont besoin (voire d'interpréter les strings comme des facteurs), alors que les routines de lecture/écriture/manipulation de données gèrent des chaines de caractères. Les problèmes de RAM sont évitables même avec les chaînes de caractère, c'est juste une histoire d'optimisation interne.
De toutes manières, l'auto-typage génère des bugs, c'est inévitable. Quand il y a une erreur de saisie triviale, style un "Na" au lieu de "NA", alors c'est toute la colonne de nombres qui devient facteur ou catactère; au contraire, on peut changer le type en appliquant un filtre (par exemple un grep \d+ sur une chaine de caractères, et pouf, le sous-jeu de données n'a pas le même type). Le plus vicieux, c'est un as.numeric sur une colonne interprétée comme un facteur, ce qui risque d'arriver de manière silencieuse avec du code écrit pour R-4.0 interprété par un R plus ancien: as.numeric(c("10","12")) donne c(10,12), alors que as.numeric(factor(c("10","12))) fait c(1,2). De bonnes soirées de débuggage poilu en perspective.