Je préfère généralement coder R pour ne pas recevoir d'avertissements, mais je ne sais pas comment éviter de recevoir un avertissement lors de l'utilisation as.numeric
pour convertir un vecteur de caractères.
Par exemple:
x <- as.numeric(c("1", "2", "X"))
Me donnera un avertissement car il a introduit les NA par la coercition. Je veux que les NA soient introduits par la coercition - y a-t-il un moyen de lui dire "oui c'est ce que je veux faire". Ou devrais-je simplement vivre avec l'avertissement?
Ou devrais-je utiliser une fonction différente pour cette tâche?
?suppressWarnings
peut-être?suppressWarnings
semble parfait.read.table
accepte un argumentna.strings
?Réponses:
Utilisez
suppressWarnings()
:Cela supprime les avertissements.
la source
suppressWarnings()
a déjà été mentionné. Une alternative consiste à d'abord convertir manuellement les caractères problématiques en NA. Pour votre problème particulier, faitestaRifx::destring
exactement cela. De cette façon, si vous obtenez un autre avertissement inattendu de votre fonction, il ne sera pas supprimé.la source
destring
fonctionne parfaitement pour l'exemple d'op, mais une mise en garde pour quiconque verra ce fil à l'avenir est que celadestring
fonctionne différemmentas.numeric
lorsque la chaîne cible est un mélange de chaîne et de numérique: c'est-à-dire,destring("x1")
donne1
maisas.numeric("x1")
donneNA
En général, la suppression des avertissements n'est pas la meilleure solution car vous voudrez peut-être être averti lorsque des entrées inattendues seront fournies.
La solution ci-dessous est un wrapper pour maintenir uniquement NA pendant la conversion du type de données. Ne nécessite aucun paquet.
la source
suppressWarnings()
est généralement une mauvaise idée, car nous avons parfois besoin de voir ces avertissements.J'ai légèrement modifié la fonction jangorecki pour le cas où nous pouvons avoir une variété de valeurs qui ne peuvent pas être converties en nombre. Dans ma fonction, une recherche de modèle est effectuée et si le modèle n'est pas trouvé, FALSE est renvoyé.! avant gperl, cela signifie que nous avons besoin des éléments vectoriels qui ne correspondent pas au modèle. Le reste est similaire à la
as.num
fonction. Exemple:la source