2013-02-21 3 views
1

В настоящее время я пытаюсь проверить, равен ли список (содержащий несколько векторов, заполненных значениями) вектору. К сожалению, для меня не работали следующие функции: match(), any(), %in%. Пример того, что я пытаюсь достичь, приводится ниже:Сравнение векторных списков в R

Позволяет сказать:

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) 

Когда я выполняю это он делает возвращение False значения вместо положительного результата. Когда я сравниваю вектор с вектором, он работает, но когда я сравниваю вектор со списком, кажется, что он не может работать должным образом.

ответ

1

Я не совсем уверен, что вы хотите получить результат (например, вам нравится векторный заказ?), Но независимо от того, что вам нужно подумать о lapply. Например,

##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) 

затем мы используем lapply пройти через каждый элемент списка и применить функции. В этом случае, я использовал функцию match (так как вы упомянули, что в вашем вопросе):

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

[[2]] 
[1] NA 

[[3]] 
[1] NA 

Это, вероятно, стоит преобразовать в вектор, так

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

и изменить NA ЛОЖЬ , что-то вроде:

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

Возможно, вы захотите упомянуть «идентичные», если вы заботитесь о заказе. И вместо преобразования вывода lapply в вектор, обычно безопаснее использовать vapply. – hadley

1

Я хотел бы использовать intersect, что-то вроде этого:

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

[[2]] 
numeric(0) 

[[3]] 
numeric(0) 
Смежные вопросы