Что происходит со следующими двумя вызовами grepl
, так это то, что R выполняет неявное приведение ваших числовых входных данных к символу, используя as.character
. Итак, следующие два вызова идентичны этому:
grepl("\\d{4}", as.character(999900000))
grepl("\\d{4}", as.character(9999000000))
, который становится:
grepl("\\d{4}", "999900000")
grepl("\\d{4}", "9.999e+09")
Вы можете ясно видеть, что второе число на самом деле не содержит четырех цифр, послеон был преобразован в строку. Чтобы избежать этого, всегда используйте регулярное выражение против фактического текста . В этом случае используйте:
grepl("\\d{4}", "999900000")
[1] TRUE
grepl("\\d{4}", "9999000000")
[1] TRUE