是否有一种简单,直接的方式(可能是内置函数)可以在另一个向量中将一个向量作为一个整体匹配? 例如:
%in%
我尝试了match
,pmatch
和target %in% A
,但这些都没有给出所需的结果。例如,target %in% B
和[1] TRUE TRUE TRUE
都会给出结果int count[]=new int[p];
,这不是我想要的。
答案 0 :(得分:4)
这是另一个版本
multi_match=function(target,A) {
lA=length(A)
lt=length(target)
if (lt>lA) return(FALSE)
any(colSums(sapply(1:(lA-lt+1),function(i) A[i:(i+lt-1)])==target)==lt)
}
让我们尝试一些数据
target <- c(1,2,3)
A <- c(4,5,6,1,2,3,1,2,3,1,3)
B <- c(4,5,6,3,2,1)
multi_match(target,A)
#TRUE
multi_match(target,B)
#FALSE
#"wrong" input order - trivially no match
multi_match(A,target)
#FALSE
上面的multi_match
函数的扩展名为multi_which
。
multi_which=function(target,A) {
lA=length(A)
lt=length(target)
if (lt>lA) return(integer(0))
which(colSums(sapply(1:(lA-lt+1),function(i) A[i:(i+lt-1)])==target)==lt)
}
multi_which(target,A)
#[1] 4 7
multi_which(target,B)
#integer(0)
#"wrong" input order - trivially no match
multi_which(A,target)
#integer(0)
答案 1 :(得分:3)
尝试:
grepl(paste(target,collapse=","),paste(A,collapse=","))
grepl(paste(target,collapse=","),paste(B,collapse=","))
这将向量连接成字符串,并在第二个参数中查找与第一个匹配的子字符串。
你可以把它放到一个返回true或false的函数中:
my_match <- function(x,y,dlm=",") grepl(paste(x,collapse=dlm),paste(y,collapse=dlm))
my_match(target,A)
[1] TRUE
my_match(target,B)
[1] FALSE
答案 2 :(得分:2)
一种可能的方法是使用match
并检查结果序列是否正在上升
all(diff(match(target, A)) == 1) && length(match(target, A)) == length(target)
或作为一项功能
> exact_match <- function(p, x) all(diff(match(p, x)) == 1) && length(match(p, x)) == length(p)
> exact_match(target,A)
[1] TRUE
> exact_match(target,B)
[1] FALSE