В коде R, используя регулярное выражение Дэвида: [отредактировано, чтобы отразить предложение Марека]
validate.input <- function(x){
match <- grepl("^[A-Ha-h]([0-9]|(1[0-2]))$",x,perl=TRUE)
## as Marek points out, instead of testing the length of the vector
## returned by grep() (which will return the index of the match and integer(0)
## if there are no matches), we can use grepl()
if(!match) stop("invalid input")
list(well_row=substr(x,1,1), well_col=as.integer(substr(x,2,nchar(x))))
}
Это просто выдает ошибку. Если вы хотите более точный контроль над обработкой ошибок, посмотрите документацию для tryCatch
, вот пример простого использования (вместо того, чтобы получать ошибку, как прежде, мы вернем NA):
validate.and.catch.error <- function(x){
tryCatch(validate.input(x), error=function(e) NA)
}
Наконец, обратите внимание, что вы можете использовать substr
для извлечения букв и цифр вместо выполнения strsplit.