我想检查一个列表(或等效的向量)是否包含在另一个列表中,而不是它是否是其中的一个子集。让我们假设我们有
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
或 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)
}
关于r - 检查列表是否包含 R 中的另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39338394/