2016-10-27 108 views
1

我想擁有各種項目的可能組合。想想參與者將三件事中的一件帶到事件中,我想知道不同的組合(參與者的順序無關緊要)。例如,創建包含多個項目的項目的所有組合

items <- rep(list(1:3), 5) 
combinations <- expand.grid(items) 
head(combinations) 
    Var1 Var2 Var3 Var4 Var5 
1 1 1 1 1 1 
2 2 1 1 1 1 
3 3 1 1 1 1 
4 1 2 1 1 1 
5 2 2 1 1 1 
6 3 2 1 1 1 

給我5個參與者的組合所需的數據幀。

現在,想象我有50位參與者。然後:

items <- rep(list(1:3), 50) 
combinations <- expand.grid(items) 
Error in rep.int(rep.int(seq_len(nx), rep.int(rep.fac, nx)), orep) : 
    invalid 'times' value 
In addition: Warning message: 
In rep.int(rep.int(seq_len(nx), rep.int(rep.fac, nx)), orep) : 
    NAs introduced by coercion to integer range 

問題是描述here和產生是由於在R.矢量的大小限制因此,似乎是expand.grid出題。

有沒有其他辦法可以在R中獲得我想要的結果?據我所知,自3.0版以來,長向量支持R,所以我有點驚訝地發現它們還沒有實現。任何指向替代品的指針都非常感謝!

+1

您可能會考慮的一種方法是避免一次生成所有組合,並且僅在需要時才生成。見[這裏](http://stackoverflow.com/questions/36143323/pythons-xrange-alternative-for-r-or-how-to-loop-over-large-dataset-lazilly)對此的質量保證 –

回答

1

使用50個參與者可創建3^50 = 7.17898e + 23行的數據框。這是不可能在你的記憶中保存的。所以我認爲這是一個縮放問題。

相關問題