2012-06-06 37 views

回答

0

想我會一起爆炸的直接解決方案提供了一個有用的比較(和實踐我的編碼 - 所有的指針歡迎...)

## initial link data frame (with start and end points) 
link=data.frame(st=c("A","B","A","B","E","F","H","H"), 
       end=c("B","C","C","D","F","G","G","E"), 
       stringsAsFactors=FALSE) 

## form blank list where clusters will build up (works up 
## to n=26!) 
n=nrow(link) 
L=c(); for (j in seq_len(n)) {L=c(L,list(NULL))} 
names(L)=LETTERS[seq_len(n)] 

## for each link in turn, pull together a collection of 
## everything in the same cluster as either end, and update 
## all relevant entries in L 
for (j in seq_len(n)) { 
    clus=sort(unique(c(link$st[j],link$end[j], 
         L[[link$st[j]]],L[[link$end[j]]]))) 
    for (k in clus) {L[[k]]=clus} 
} 
print(L) 

輸出如預期:

$A 
[1] "A" "B" "C" "D" 

$B 
[1] "A" "B" "C" "D" 

$C 
[1] "A" "B" "C" "D" 

$D 
[1] "A" "B" "C" "D" 

$E 
[1] "E" "F" "G" "H" 

$F 
[1] "E" "F" "G" "H" 

$G 
[1] "E" "F" "G" "H" 

$H 
[1] "E" "F" "G" "H" 
+0

太棒了!很高興它是有幫助的,Sonal :) –

相關問題