2015-01-13 72 views
2

在我的代碼的最後一行,我得到一個錯誤,說沒有足夠的內存。任何幫助,將不勝感激!我試圖找到所有組合你可以裝配一個由9名隊員組成的隊伍,其中2個選自1到4組,1個選自組5.在找到所有組合後,我想找到低於給定工資門檻的所有組合。沒有足夠的內存/代碼運行緩慢

pg.number= 1:10 
sg.number= 11:20 
sf.number= 21:30 
pf.number=31:40 
c.number=41:50 

pg.combos= combn(pg.number, 2) 
sg.combos= combn(sg.number,2) 
sf.combos= combn(sf.number, 2) 
pf.combos= combn(pf.number, 2) 
c.combos= combn(c.number, 1) 


replicate.vec= function(vector,matrix.1) { 
    empty.matrix<- matrix(vector, nrow=length(vector), ncol= ncol(matrix.1)) 
    rbind(matrix.1, empty.matrix) 
} 


list<- as.list(numeric(ncol(sg.combos))) 
for (i in 1:ncol(sg.combos)) { 
    list[[i]]=replicate.vec(sg.combos[,i],pg.combos) 
} 
pg.and.sg<-as.matrix(do.call(cbind,list)) 

list<- as.list(numeric(ncol(sf.combos))) 
for (i in 1:ncol(sf.combos)) { 
    list[[i]]=replicate.vec(sf.combos[,i],pg.and.sg) 
} 
pg.sg.sf<-as.matrix(do.call(cbind,list)) 


list<- as.list(numeric(ncol(pf.combos))) 
for (i in 1:ncol(pf.combos)) { 
    list[[i]]=replicate.vec(pf.combos[,i],pg.sg.sf) 
} 
pg.sg.sf.pf<-as.matrix(do.call(cbind,list)) 


list<- as.list(numeric(ncol(c.combos))) 
for (i in 1:ncol(c.combos)) { 
    list[[i]]=replicate.vec(c.combos[,i],pg.sg.sf.pf) 
} 
all.lineups<-as.matrix(do.call(cbind,list)) 
all.lineups 


c1<- 1:50 
c2<- rnorm(50) 
c3<- rnorm(50, mean=100) 
c4<- rnorm(50) 
df<- data.frame(cbind(c1,c2,c3,c4)) 

get.fantasy.salary<- function(vector) { 
    sum(df[vector,3]) 
} 

get.fantasy.points<- function(vector) { 
    sum(df[vector,4]) 
} 
sum.salary<-apply(all.lineups,2, get.fantasy.salary) 
+0

爲什麼你不把每個組的薪水最低的球員? –

+0

@marat我對我的文章進行了編輯。我想找到低於給定工資門檻的所有組合。 – Zslice

+0

也許一些聰明的數學比聰明的編程更有幫助。你有沒有考慮MathOverflow的某種最佳算法? – nacnudus

回答

0

apply(,2)很慢。相反,你可以使用

salary.lineups <- matrix(df[all.lineups,3],nrow=9) 
colSums(salary.lineups) 
相關問題