看板 R_Language 關於我們 聯絡資訊
文章分類提示:問題 [問題類型]:程式諮詢 [軟體熟悉度]:入門 [問題敘述]: 想要寫一個重複組合的程式,可以將所有可能的結果列出來 例如: 求x+y+z=25的正整數解 我能想到的就只有利用3個for及if即可把所有可能全部列出來 但我需要的是給定n個x,以及加總的數目,即以下狀況: x1+x2+...+xn=k,因此若用for的話會有n個for。 使用for及if的程式如下: q=0 result=matrix({0},nrow=351,ncol=3) for ( i in 0:25 ) { for ( j in 0:25 ) { for (k in 0:25 ) { if( i+j+k==25 ) { q=q+1 result[q,]=c(i,j,k) } } } } 另外一問,有方法將新列出的可能自動加進新列嗎? 這樣就不需給定nrow的值了XD 謝謝各位! [關鍵字]:重複組合 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.170.52.33 ※ 文章網址: http://www.ptt.cc/bbs/R_Language/M.1397721100.A.5A9.html ※ 編輯: swedrf0112 (118.170.52.33), 04/17/2014 17:08:24 ※ 編輯: swedrf0112 (118.170.52.33), 04/17/2014 17:10:29
h0h1:我不確定 package "partitions" 對你會不會有幫助 04/17 18:09
celestialgod:M = expand.grid(0:25,0:25,0:25) 04/17 19:38
celestialgod:M_sub = M[rowSums(M) == 25,] 04/17 19:38
celestialgod:M_sub就是其解 04/17 19:38
celestialgod:如果n個就expand.grid 好幾個 把解空間延展出去 04/17 19:40
celestialgod:只是這方法 n太大可能就沒辦法做了 04/17 19:40
swedrf0112:對,而且這樣如果x1~x10 就要寫expand.grid(0:25...) 04/17 22:17
swedrf0112:裡面的0:25要寫10個,這樣有點太麻煩了XD 04/17 22:18
swedrf0112:不過還是謝謝你!! 04/17 22:18
celestialgod:可是你寫回圈寫十層不煩嗎XD 04/17 23:12
celestialgod:如果x1~x10範圍一樣,可以用回文的方法 04/17 23:13
celestialgod:可以不用設定nrow就犧牲效率而已 04/17 23:25