我正在尝试寻找是否有一种快速方法可以在 R 中的数组中搜索特定字符串,有点像游戏 Boggle ,除非您事先知道这个词。
您可以按以下方向移动字符串的下一个字母:上、下、右或左
举一个简单的例子,您有一个以下形式的数组:
> G
A, Q, A, Q, Q,
A, Q, P, Q, Q,
Q, Q, P, L, Q,
Q, Q, Q, E, Q
并且您想要使用字符串 APPLE
对 G 应用函数,为了使函数返回 TRUE
,APPLE
存在于该数组中,如果没有,则为 FALSE
。
是否存在可以执行此操作的预制函数或包,或者是否有一种聪明的方法来执行此操作,我对处理 R 中的字符串相对较新,并且正在努力寻找一种方法。
非常感谢任何帮助。谢谢。
最佳答案
这将首先检查您的单词中是否存在数组中不存在的字符,然后检查数组中的字符数是否足以满足单词中的重复字母
word <- strsplit("APPLE", "")
pool <- c("A", "Q", "A", "Q",
"Q", "A", "Q", "P",
"Q", "Q", "Q", "Q",
"P", "L", "Q", "Q",
"Q", "Q", "E", "Q")
t.word <- table(word)
t.pool <- table(pool)
length(setdiff(names(t.word), names(t.pool))) == 0
min(t.pool[names(t.word)] - t.word) >= 0
最后两个函数都会输出TRUE
,以表明word
中的所有字母都存在于pool
中,并且单个字母的计数word
中的字母不大于 pool
以函数形式,如果找到,将输出TRUE
,否则输出FALSE
word.find <- function(word, pool) {
t.word <- table(strsplit(word, ""))
t.pool <- table(pool)
length(setdiff(names(t.word), names(t.pool))) == 0 & min(t.pool[names(t.word)] - t.word) >= 0
}
word.find("APPLE", pool)
[1] TRUE
word.find("APPLES", pool)
[1] FALSE
word.find("APPLEE", pool)
[1] FALSE
关于arrays - 使用 R 查找数组中的特定字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41508006/