Re: [问题] 重复组合

楼主: celestialgod (天)   2014-04-17 23:25:04
不想打十次就用一些取巧的方法...
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
: 谢谢各位!
: [关键字]:重复组合
作者: swedrf0112 (M)   2014-04-17 23:39:00
感谢你~~ 又学到一招了XD
作者: andrew43 (讨厌有好心推文后删文者)   2014-04-17 23:55:00
我也觉得用prase就好了,管它cpu ram够不够力。 XD

Links booklink

Contact Us: admin [ a t ] ucptt.com