2013-10-13 42 views
4

簡單問題:我試圖獲得所有組合,其中3個數字的權重爲1。中的R 0-1總和之間的值的1的所有組合

例款項(0.1和0.9之間):

c(0.20,0.20,0.60) 
c(0.35,0.15,0.50) 
................. 

與權重由0.05

不同的我已經試過這樣:

library(gregmisc) 
permutations(n = 9, r = 3, v = seq(0.1,0.9,0.05)) 

combn(seq(0.1,0.9,0.05),c(3)) 

然而I W應該需要3個數字(權重)等於1,我該怎麼做?

+0

請您擴展您的範例嗎? 輸入和至少期望的輸出將是優選的。 根據你的描述,我很難理解這個問題。 – r0bert

回答

6
x <- expand.grid(seq(0.1,1,0.05), 
       seq(0.1,1,0.05), 
       seq(0.1,1,0.05)) 

X < - X [rowSums(x)的== 1]

編輯:使用此來避免浮點錯誤:

x <- x[abs(rowSums(x)-1) < .Machine$double.eps^0.5,] 

#if order doesn't matter 
unique(apply(x,1,sort), MARGIN=2) 
#  15 33 51 69 87 105 123 141 393 411 429 447 465 483 771 789 807 825 #843 1149 1167 1185 1527 1545 
#[1,] 0.1 0.10 0.1 0.10 0.1 0.10 0.1 0.10 0.15 0.15 0.15 0.15 0.15 0.15 0.2 0.20 0.2 0.20 0.2 0.25 0.25 0.25 0.3 0.30 
#[2,] 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.15 0.20 0.25 0.30 0.35 0.40 0.2 0.25 0.3 0.35 0.4 0.25 0.30 0.35 0.3 0.35 
#[3,] 0.8 0.75 0.7 0.65 0.6 0.55 0.5 0.45 0.70 0.65 0.60 0.55 0.50 0.45 0.6 0.55 0.5 0.45 0.4 0.50 0.45 0.40 0.4 0.35 

這將運行如果可能的組合數量變得巨大,則會導致性能和內存問題。

+0

謝謝,這是我需要的。 – Maximilian

+5

對於性能/內存的一些改進,將第三列設置爲1-x1-x2,然後跳過求和和排序。 – Frank

+0

爲什麼'0.10 0.45 0.45'沒有出現在答案中? – drammock

相關問題