Gennaro Tedesco - 1 month ago 11x
R Question

# Check if list contains another list in R

I want to check if a list (or a vector, equivalently) is contained into another one, not if it is a subset of its. Let us assume we have

``````r <- c(1,1)
s <- c(5,2)
t <- c(1,2,5)
``````

The function should behave as follows:

``````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
``````

The operator
`%in%`
checks for subsets, hence it would return
`TRUE`
in both cases, likewise
`all`
or
`any`
. I am sure there is a one-liner but I just do not see it.

Another custom-function version, checking whether the number of elements (`length()`) of the non-equal elements (`setdiff`) is equal to the difference in the vectors' length:

``````r <- c(1,1)
s <- c(5,2)
t <- c(1,2,5)
w <- c(1, 1, 3, 6)

# Does vector x contain vector y?
is.contained <- function(x, y) {
length(setdiff(x, y)) == length(x) - length(y)
}

is.contained(r, t)
#> [1] FALSE
is.contained(t, s)
#> [1] TRUE
is.contained(w, r)
#> [1] TRUE
is.contained(w, s)
#> [1] FALSE
is.contained(r, w)
#> [1] FALSE
``````
Source (Stackoverflow)