2016-10-24 9 views
0

Rに複数のリストがあり、各リストには一意の要素がありますが、いくつかの要素は複数のリストにあります。私はリストをシャッフルしたいだけでなく、それぞれのリストにユニークな要素があるようにしたい。ここに何かがあるが、これは各リストは、5つのユニークな番号を持っていることを確認するために余分なステップを把握しようとすると、エンドR繰り返し要素を持つリストをシャッフル

x<-list() 
x[[1]]<-c(1,2,3,4,5) 
x[[2]]<-c(1,2,6,7,8) 

u<-unlist(x) 
x2<-relist(u[sample(length(u))],skeleton=x) 

> x 
[[1]] 
[1] 1 2 3 4 5 

[[2]] 
[1] 1 2 6 7 8 

> x2 
[[1]] 
[1] 4 8 3 5 6 

[[2]] 
[1] 2 1 2 1 7 

でユニークなリストで終わるものではありません。

+0

あなたは、元の数字のすべてがどこかで使用されていることを確認しますか? – Dason

+0

はい、リストをシャッフルして、5と8を取り出して切り替え、リストのサイズが異なることもあります。 – user295944

+0

'u < - ユニーク(unlist(x)); x2 < - relist(replicate(2、sample(length(u)、5))、スケルトン= x) '? – JasonAizkalns

答えて

0

あなたの例ではベクトルは既にだけのユニークな値が含まれているので、私は解決策は、のような単純なものができると思う:

x <- list(c(1,2,3,4,5), c(1,2,6,7,8)) 

lapply(x, sample) 

# [[1]] 
# [1] 3 2 5 1 4 
# 
# [[2]] 
# [1] 1 6 7 2 8 
+0

これはelemetsを同じリストに保持し、順序をシャッフルします。私は要素が一つのリストから他のリストに移動できるようにしたい。 – user295944

関連する問題