web-dev-qa-db-fra.com

Modifier les paramètres des chaînes AsFactors pour data.frame

J'ai une fonction dans laquelle je définis un data.frame que j'utilise des boucles pour remplir avec des données. À un moment donné, je reçois le message d'avertissement:

Messages d'avertissement: 1: dans [<-.factor (*tmp*, iseq, value = "CHANGE"): niveau de facteur non valide, NA générés

Par conséquent, lorsque je définis mon data.frame, je voudrais définir l'option stringsAsFactors sur FALSE mais je ne comprends pas comment le faire.

J'ai essayé:

DataFrame = data.frame(stringsAsFactors=FALSE)

et aussi:

options(stringsAsFactors=FALSE)

Quelle est la bonne façon de définir l'option stringsAsFactors?

27
VincentH

Cela dépend de la façon dont vous remplissez votre bloc de données, pour lequel vous n'avez donné aucun code. Lorsque vous construisez un nouveau bloc de données, vous pouvez le faire comme ceci:

x <- data.frame(aName = aVector, bName = bVector, stringsAsFactors = FALSE)

Dans ce cas, si par ex. aVector est un vecteur de caractères, puis la colonne dataframe x$aName sera également un vecteur de caractères et non un vecteur de facteurs. Combiner cela avec un bloc de données existant (en utilisant rbind, cbind ou similaire) devrait conserver ce mode.

Lorsque vous exécutez

options(stringsAsFactors = FALSE)

vous modifiez le paramètre global par défaut. Ainsi, chaque trame de données que vous créez après avoir exécuté cette ligne ne sera pas automatiquement convertie en facteurs, sauf indication contraire explicite. Si vous avez seulement besoin d'éviter la conversion en un seul endroit, je préfère ne pas changer la valeur par défaut. Cependant, si cela affecte de nombreux endroits dans votre code, changer la valeur par défaut semble être une bonne idée.

Une dernière chose: si votre vecteur déjà contient des facteurs, alors aucun des éléments ci-dessus ne le transformera en vecteur de caractères. Pour ce faire, vous devez explicitement le reconvertir à l'aide de as.character ou similaire.

38
MvG