2014-04-24 100 views
0

我想匹配包含不同長度向量的列表中的數字。仍然我的解決方案(下面)不匹配每個向量的第一項之外的任何東西。不同長度向量列表中的匹配數

seq_ <- seq(1:10) 
list_ <- list(seq_[1:3], seq_[4:7], seq_[8:10]) 
list_ 
# [[1]] 
# [1] 1 2 3 
# 
# [[2]] 
# [1] 4 5 6 7 
# 
# [[3]] 
# [1] 8 9 10 

for (i in seq_) { 
    print(match(i,list_)) 
} 
# [1] 1 
# [1] NA 
# [1] NA 
# [1] 3 
# [1] NA 
# [1] NA 
# [1] NA 
# [1] NA 
# [1] NA 
# [1] NA 
+2

什麼是't0'?你想獲得什麼輸出?請給我們一個例子.. – gagolews

+0

如果對於每個'i'你想要一個列表(而不是一個向量,因爲它可能會超過1個)位於'list_'中,那麼你想要的是:'lapply(seq_,函數(i)lapply(list_,function(elems)match(i,elems)))'。重點是:你需要一個嵌套循環,你不能匹配一個列表。如果你需要其他東西,那麼請儘量清楚地闡述它。 –

+0

@gagolews對不起,我重新編寫了代碼。 – CptNemo

回答

0

在一般情況下,你可能會與which快樂,在

編輯:更改信息顯示在值完整循環。

seq_ <- seq(1:10) 
list_ <- list(seq_[1:3], seq_[4:7], seq_[8:10]) 
matchlist<-list(length=length(list_)) 
    for(j in 1:length(list_)) { 
     matchlist[[j]] <- unlist(sapply(seq_, function(k) which(list_[[j]]==k))) 
    } 

這將返回所有匹配的位置。如果你創建一個輸入如my.list <- list(sample(1:10,4,replace=TRUE), sample(1:10,7,replace=TRUE))

+0

這對我不起作用。你也忘了支架。 – JT85