我需要驗證字符矢量模式的字符串。我當前的代碼是:R代碼檢查單詞是否匹配模式
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的矩陣, 其中行名和列名是允許的字符。然後我遍歷一個巨大的文本文件的每個單詞,並建立一個'字母優先'矩陣。例如,考慮單詞「特別」,從第一個字符開始:
row s, col p -> increment 1
row p, col e -> increment 1
row e, col c -> increment 1
... and so on.
我的代碼的瓶頸是在矢量分配,我是「追加」,而不是預先分配的最終載體,所以代碼需要30分鐘才能執行,而不是20秒!
你可以通過包括:'word'和'min.size'來重現這一點。另外,你可以用語言解釋你開始和期望的結果。 (包括給定'word'的所需輸出。) – Justin
編輯,謝謝。 – Fernando