我试图通过grepl和regexp验证字符串中的数字向量。所以我发现grepl自动修剪前导零,所以我得到了错误的答案。我尝试使用as.character但没有成功。
这是我的功能:
isValidTest <- function(x){
x <- as.character(x)
grepl("^[[:digit:]]{13}$", x)
}
和我的测试:
> isValidTest(c(9788467850703,0759398399, 3002011502068, 0788467850703))
[1] TRUE FALSE TRUE FALSE
而不是引号:
> isValidTest(c(9788467850703,0759398399, 3002011502068, "0788467850703"))
[1] TRUE FALSE TRUE TRUE
注意以0 0788467850703
开头的向量的最后一项,我想检索一个真正的答案。另一方面,为什么as.character
不起作用?
答案 0 :(得分:0)
as.character
未按预期工作,因为您构造的向量被强制转换为数字并失去前导零:
> 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"
将数字转换回字符串不会恢复前导零。
使用字符串向量(作为推荐的第一条评论的作者)。