2017-03-01 6 views
1

Ich versuche, einen Vektor von Ziffern in einer Zeichenfolge zu validieren, über Grepl und Regexp. Also habe ich festgestellt, dass grepl automatisch führende Nullen schneidet, so dass ich falsche Antworten bekomme. Ich habe versucht, as.character ohne Erfolg zu verwenden.Validieren Zeichenfolge Vektor von Ziffern der bestimmten Länge

Dies ist meine Funktion:

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

und mein Test:

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

Statt mit Zitaten:

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

Hinweis letztes Element des Vektors mit 0 0788467850703, ab I möchte eine WAHRE Antwort erhalten. Auf der anderen Seite, warum as.character funktioniert nicht?

+3

Es ist nicht grepl, geben Sie 012 auf der Konsole ein und drücken Sie die Eingabetaste, es ist 12. Wenn dies Telefonnummern sind, behalten Sie sie als Zeichenfolgen. – zx8754

+0

Danke zx !! Was für ein Fehler! – Gabriel

Antwort

0

as.character funktioniert nicht wie erwartet, da Ihre konstruierte Vektor in numerische dazu gezwungen wird, und verliert die führenden Nullen dann:

> 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" 

die Zahlen in einen String konvertieren damals die führenden Nullen nicht erholen.

Verwenden Sie stattdessen einen Vektor von Zeichenfolgen (als der Autor des ersten Kommentars empfohlen).

Verwandte Themen