看板 R_Language 關於我們 聯絡資訊
不想打十次就用一些取巧的方法... x = 0:5; d = 10 str = paste(rep("x",d), collapse = ",") M = eval(parse(text=paste0("expand.grid(", str, ")"))) a = M[rowsum(M)==5, ] 只是這樣的做法有 效能跟記憶體瓶頸 要有更有效率的做法要找package... 不過這種方法在d小的時候非常快XDDD PS: 取subset可以參考前面幾篇有關data.table的討論 ※ 引述《swedrf0112 (M)》之銘言: : 文章分類提示:問題 : [問題類型]:程式諮詢 : [軟體熟悉度]:入門 : [問題敘述]: : 想要寫一個重複組合的程式,可以將所有可能的結果列出來 : 例如: 求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), 來自: 218.164.224.72 ※ 文章網址: http://www.ptt.cc/bbs/R_Language/M.1397748306.A.198.html
swedrf0112:感謝你~~ 又學到一招了XD 04/17 23:39
不客氣XD 這招也是跟版上的大大學的XD
andrew43:我也覺得用prase就好了,管它cpu ram夠不夠力。 XD 04/17 23:55
我也喜歡這招XDD 不然要用package之類的有點煩,沒那麼簡單使用.... RAM不夠大就加RAM阿XD ※ 編輯: celestialgod (218.164.224.72), 04/18/2014 00:02:39