我想检查一个列表(或一个矢量,等价)是否包含在另一个列表中,而不是它是否是它的子集.让我们假设我们有
r <- c(1,1)
s <- c(5,2)
t <- c(1,2,5)
Run Code Online (Sandbox Code Playgroud)
该函数应该表现如下:
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
Run Code Online (Sandbox Code Playgroud)
操作员%in%检查子集,因此TRUE在两种情况下都会返回,同样all或any.我确信有一个单行,但我只是没有看到它.
length()另一个自定义函数版本,检查不相等元素 ( ) 的元素数量 ( setdiff) 是否等于向量长度之差:
# Does vector x contain vector y?
is.contained <- function(x, y) {
z <- x[x %in%setdiff(x, y)]
length(z) == length(x) - length(y)
}
r <- c(1,1)
s <- c(1,1,5)
t <- c(1,2,5)
is.contained(r, t)
#> [1] FALSE
is.contained(s, r)
#> [1] TRUE
is.contained(r, s)
#> [1] FALSE
Run Code Online (Sandbox Code Playgroud)