Вы можете использовать один из инструментов регулярных выражений в R, так как это действительно упражнение на сопоставление с образцом, в частности, gregexpr
для этого вопроса.Векторы p
и q
представляют шаблон поиска, а main
- это место, где мы хотим искать эти шаблоны.Со страницы справки для gregexpr
:
gregexpr returns a list of the same length as text each element of which is of
the same form as the return value for regexpr, except that the starting positions
of every (disjoint) match are given.
Таким образом, мы можем взять длину первого списка, возвращаемого gregexpr
, который дает начальные позиции совпадений.Сначала мы свернем векторы, а затем выполним поиск:
someFunction <- function(haystack, needle) {
haystack <- paste(haystack, collapse = "")
needle <- paste(needle, collapse = "")
out <- gregexpr(needle, haystack)
out.length <- length(out[[1]])
return(out.length)
}
> someFunction(main, p)
[1] 2
> someFunction(main, q)
[1] 3
Примечание - вам также нужно бросить "" вокруг вектора main
, p
и q
векторов, если у вас нетпеременные A, B, C и др. определены.
main <- c("A","B","C","A","B","V","A","B","C","D","E")
p <- c("A","B","C")
q <- c("A","B")