我需要根据字符向量模式验证字符串。我目前的代码是:
trim <- function (x) gsub("^\\s+|\\s+$", "", x)
# valid pattern is lowercase alphabet, '.', '!', and '?' AND
# the string length should be >= than 2
my.pattern = c(letters, '!', '.', '?')
check.pattern = function(word, min.size = 2)
{
word = trim(word)
chars = strsplit(word, NULL)[[1]]
all(chars %in% my.pattern) && (length(chars) >= min.size)
}
例子:
w.valid = 'special!'
w.invalid = 'test-me'
check.pattern(w.valid) #TRUE
check.pattern(w.invalid) #FALSE
我想这非常慢......有没有更快的方法来做到这一点?也许正则表达式?谢谢!
PS:感谢大家的精彩回答。我的目标是构建一个 29 x 29 矩阵,其中行名和列名是允许的字符。然后我遍历一个巨大的文本文件的每个单词并构建一个“字母优先级”矩阵。例如,考虑从第一个字符开始的单词“special”:
row s, col p -> increment 1
row p, col e -> increment 1
row e, col c -> increment 1
... and so on.
我的代码的瓶颈是向量分配,我是在“追加”而不是预先分配最终的向量,所以代码需要 30 分钟来执行,而不是 20 秒!