user2083211
user2083211

Reputation: 13

Vector-list comparison in R

I am currently trying to check if a list(containing multiple vectors filled with values) is equal to a vector. Unfortunately the following functions did not worked for me: match(), any(), %in%. An example of what I am trying to achieve is given below:

Lets say:

lists=list(c(1,2,3,4),c(5,6,7,8),c(9,7))
vector=c(1,2,3,4)
answer=match(lists,vector)

When I execute this it does return False values instead of a positive result. When I compare a vector with a vector is working but when I compare a vector with a list it seems that it can not work properly.

Upvotes: 1

Views: 3672

Answers (2)

agstudy
agstudy

Reputation: 121568

I would use intersect, something like this :

lapply(lists,intersect,vector)
[[1]]
[1] 1 2 3 4

[[2]]
numeric(0)

[[3]]
numeric(0)

Upvotes: 2

csgillespie
csgillespie

Reputation: 60462

I'm not completely sure what you want the result to be (for example do you care about vector order?) but regardless you'll need to think about lapply. For example,

##Create some data
R> lists=list(c(1,2,3,4),c(5,6,7,8),c(9,7)) 
R> vector=c(1,2,3,4) 

then we use lapply to go through each list element and apply a function. In this case, I've used the match function (since you mentioned that in your question):

R> lapply(lists, function(i) all(match(i, vector)))
[[1]]
[1] TRUE

[[2]]
[1] NA

[[3]]
[1] NA

It's probably worth converting to a vector, so

R> unlist(lapply(lists, function(i) all(match(i, vector))))
[1] TRUE   NA   NA

and to change NA to FALSE, something like:

m = unlist(lapply(lists, function(i) all(match(i, vector))))
m[is.na(m)] = FALSE

Upvotes: 1

Related Questions