【发布时间】:2015-03-11 00:04:35
【问题描述】:
在代码的最后一行,我收到一条错误消息,提示内存不足。任何帮助,将不胜感激!我正在尝试找到所有组合,您可以组建一支由 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)
【问题讨论】:
-
为什么不从各组中挑选薪水最低的球员?
-
@marat 我对我的帖子进行了编辑。我想找到低于给定工资阈值的所有组合。
-
也许一些聪明的数学比聪明的编程更有帮助。您是否考虑过将 MathOverflow 用于某种最佳算法?
-
我建议您查看
bigmemory包来处理您的申请——这可能是尝试在big.matrix.class而不是普通矩阵上申请的快速解决方案。