正如你已經被告知,排列的數量可以計算爲:
R> choose(40,20)
[1] 137846528820
然而,是R目前可處理最長的向量爲2^31 - 1元素長,即:
R> 2^31 - 1
[1] 2147483647
這比你想要產生的排列數少。因此,你所得到的錯誤和錯誤你; D得到,如果你試圖與標準功能來生成這些排列combn()
:
R> combn(40, 20)
Error in matrix(r, nrow = len.r, ncol = count) :
invalid 'ncol' value (too large or NA)
In addition: Warning message:
In combn(40, 20) : NAs introduced by coercion
此時你就必須訴諸編寫代碼來生成排列以類似浴池的方式並研究R上的許多大數據包之一(請參閱High Performance Computing任務視圖)。
或者,這將是我的建議,考慮一下你可能會用1370億美元做些什麼! (美國)排列,然後採取另一種方法。如果你可以每秒處理1次(即花1秒鐘做一些有意義的排列),你仍然可以在4000年的時間內處理結果!
那麼,爲什麼你想要所有的排列?一個較小的隨機集足夠了嗎?
沒有任何R我很熟悉,除了R Devel目前可能的位。 R中最長的矢量長度爲2^31 - 1個元素。 'combn(40,20)'會產生'選擇(40,20)'組合(實際上它會產生一個總長度爲2 *的選擇向量(40,20)',因爲它將結果存儲爲矩陣。遠遠大得不能被R的工具處理。 –
@GavinSimpson:的確如此。我應該計算出實際價值。儘管如此,它只是巨大的。順便說一句,如果R需要整整一秒才能用20個數字做任何有意義的事情,即使考慮到我聽說過R缺乏速度,我也會感到驚訝。如果你可以在微秒內對每個置換做一些有意義的事情 - 就像沒有考慮到這一點 - 那麼你可以在幾天內完成整個過程,而且沒有任何並行化。 (噢,它是0.138 yquan-gillion。fwiw) – rici
@rico謝謝你指出我不能指望。現在修復。至於其他部分;是的,有很多方法可以解決這個問題,並行處理將有所幫助,磁盤存儲選項也是如此。假設一個不重要的計算,我對每個排列的時間保守。 R通常很快;有時候用戶的友好方式會受到影響。 –