使用R在数组中查找特定字符串

use*_*209 9 arrays string r

我试图找到一个快速的方法来搜索R中的数组中的特定字符串,有点像游戏Boggle,除了你知道前面的单词.

您可以按以下方向移动字符串的下一个字母:向上,向下,向右或向左

比如一个简单的例子,你有一个表格数组:

> G    
A, Q, A, Q, Q,  
A, Q, P, Q, Q,   
Q, Q, P, L, Q,   
Q, Q, Q, E, Q
Run Code Online (Sandbox Code Playgroud)

并且您希望将函数应用于带有字符串的G APPLE,对于要返回的函数TRUE,APPLE存在于此数组中,FALSE如果不存在.

是否存在可以做到这一点的预制函数或包,或者有一种聪明的方法来做到这一点,我在处理R中的字符串时相对较新,我很难找到方法.

任何帮助非常感谢.谢谢.

man*_*ark 2

这将首先检查您的单词中是否有数组中不存在的字符,然后检查数组中的字符数是否足以满足单词中的重复字母

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
Run Code Online (Sandbox Code Playgroud)

最后两个函数都会输出TRUE显示所有字母 from 都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
Run Code Online (Sandbox Code Playgroud)