2017-03-01 1 views
1

J'essaie de valider un vecteur de chiffres dans une chaîne, via grepl et regexp. J'ai donc trouvé que grepl ajuste automatiquement les zéros en tête, donc je reçois des réponses erronées. J'ai essayé d'utiliser as.character sans succès.Validation du vecteur de chaîne de chiffres de longueur déterminée

C'est ma fonction:

isValidTest <- function(x){ 
    x <- as.character(x) 
    grepl("^[[:digit:]]{13}$", x) 
} 

et mon test:

> isValidTest(c(9788467850703,0759398399, 3002011502068, 0788467850703)) 
[1] TRUE FALSE TRUE FALSE 

lieu avec des citations:

> isValidTest(c(9788467850703,0759398399, 3002011502068, "0788467850703")) 
[1] TRUE FALSE TRUE TRUE 

note dernier élément du vecteur commençant par 0 0788467850703 que je voudrais récupérer une réponse VRAIE. D'un autre côté, pourquoi as.character ne fonctionne pas?

+3

Ce n'est pas grepl, tapez 012 sur la console et appuyez sur Entrée, il est 12. Si ce sont des numéros de téléphone, gardez-les sous forme de chaînes. – zx8754

+0

Merci zx !! Quelle faute! – Gabriel

Répondre

0

as.character ne fonctionne pas comme prévu depuis votre vecteur construit est sous la contrainte numérique et perd les zéros alors:

> x <- c(9788467850703,0759398399, 3002011502068, 0788467850703) 
> x 
[1] 9.788468e+12 7.593984e+08 3.002012e+12 7.884679e+11 
> lapply(x,class) 
[[1]] 
[1] "numeric" 

[[2]] 
[1] "numeric" 

[[3]] 
[1] "numeric" 

[[4]] 
[1] "numeric" 

Conversion des numéros en une chaîne ne récupère pas les zéros alors.

Utilisez un vecteur de chaînes à la place (comme l'auteur du premier commentaire recommandé).