2014-11-21 2 views
0

У меня есть список с разными векторами длины 1s и 2s, и я пытаюсь вытащить векторы на основе nchar и личность, то есть 1, 2, c(1,1), c(2,2), c(2,1), c(1,2). Моя проблема заключается в идентификации векторов, для которых nchar > 1 содержит комбинации c(1,1), c(2,2), c(2,1), c(1,2).индекс числовой список векторов для нескольких номеров

#dummy code 

`T1,T2` <- 1 
`T2,T1` <- 2 
`T2,T3` <- c(2,1) 
`T3,T2` <- c(2,2) 
`T3,T4` <- c(1,1) 
`T4,T4` <- c(1,2) 
lst <- list(`T1,T2`=`T1,T2`, `T2,T1`=`T2,T1`, `T2,T3`=`T2,T3`, `T3,T2`=`T3,T2`, `T3,T4`=`T3,T4`, `T4,T4`=`T4,T4`) 

single <- lst[nchar(lst)==1] # only lists with nchar==1 
multiple <- lst[nchar(lst) > 1] # only lists with nchar > 1 

# identify single lists which contain 1s and 2s 
single_1s <- single[single==1] # single vectors for 1s 
single_2s <- single[single==2] # single vectors for 2s 

Как бы сделать то же самое для нескольких списков в моем примере?

Попытка идентифицировать несколько списков, содержащих любую из комбинаций c(1,1), c(2,2), c(2,1), c(1,2), например.

multiple[multiple==c(1,1)] # Does not work 

Любых указателей будет высоко оценен, спасибо

+1

'множественных [sapply (множественная, функция (х) все (х == с (1 , 1)))] ' – akrun

+0

Аккуратно! Большое спасибо! –

+0

Нужно ли вам для всех этих совпадений в списке – akrun

ответ

1

Вы можете создать list все те векторы, которые необходимо соответствовать. Затем используйте lapply/sapply и ==, чтобы соответствовать каждому элементу indxlst с multiple

indxlst <- list(c(1,1), c(2,2), c(2,1), c(1,2)) 
lapply(indxlst, function(x) 
     multiple[sapply(multiple, function(y) all(y==x))]) 

Если вам нужны count

sapply(indxlst, function(x) sum(sapply(multiple, 
           function(y) all(y==x)))) 
+0

Отлично, спасибо большое! :) –

Смежные вопросы