См. ?regex
и ?grep
, и в моем ответе вы скопировали код.
Q1: если пользователь просто нажимает клавишу ввода, n становится ""
, которое, когда оно превращается в целое число, становится NA.
> n <- ""
> as.integer(n)
[1] NA
Q2: grepl
- это функция, которая проверяет, соответствуют ли значения в векторе регулярному выражению (?regex
) и возвращает логический вектор. В этом случае регулярное выражение "\\D"
. \D
означает все, что не является цифрой, включая знак минус или точку. Обратная косая черта должна быть экранирована, поэтому она двойная. Так что, если он соответствует чему-то, что не является цифрой, n станет -1. Теперь "" ничего не подходит, поэтому n станет as.integer (n) и, следовательно, NA (см. Q1).
Q3: для проверки писем вы можете использовать регулярные выражения -again- или %in% letters
:
> n <- "a"
> grepl("[a-z]",n)
[1] TRUE
> n %in% letters
[1] TRUE
Или, если вы хотите использовать как строчные, так и прописные буквы:
> n <- c("a","A")
> grepl("[[:alpha:]]",n)
[1] TRUE TRUE
> grepl("(?i)[a-z]",n)
[1] TRUE TRUE
Это только некоторые из возможностей. Прочитайте файлы справки, к которым я обращаюсь, и поиграйте с ними некоторое время. Регулярные выражения очень эффективны, когда вы освоите их.