我想检查一个列表(或等效的向量)是否包含在另一个列表中,而不是它是否是其子集。让我们假设我们有
r <- c(1,1)
s <- c(5,2)
t <- c(1,2,5)
该函数的行为应如下:
is.contained(r,t)
[1] FALSE
# as (1,1) is not contained in (1,2,5) since the former
# contains two 1 whereas the latter only one.
is.contained(s,t)
[1] TRUE
运营商%in%
检查子集,因此它将返回TRUE
在这两种情况下,同样all
or any
。我确信有一句俏皮话,但我只是没有看到它。
使用循环怎么样。我迭代第一个向量并检查它是否存在于第二个向量中。如果它在那里,我将其从第二个向量中删除。这个过程还在继续。
is.contained=function(vec1,vec2){
x=vector(length = length(vec1))
for (i in 1:length(vec1)) {
x[i] = vec1[i] %in% vec2
if(length(which(vec1[i] %in% vec2)) == 0) vec2 else
vec2=vec2[-match(vec1[i], vec2)]
}
y=all(x==T)
return(y)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)