expand.grid - 尝试解决"无法分配大小的矢量"问题

时间:2016-04-03 20:07:19

标签: r performance function mclapply

我需要创建庞大的数据框架组合,但我并不需要它们。但正如我在这里看到的那样,expand.grid函数无法添加组合抛出的特定条件。

所以我决定一步一步走。例如,我有

variants<-9 # number of possible variants
aa<-c(0:variants) # vector of possible variants
ab<-c(0:variants)
ac<-c(0:variants)
ad<-c(0:variants)
ae<-c(0:variants)
af<-c(0:variants)
ag<-c(0:variants)
ah<-c(0:variants)
ai<-c(0:variants)
aj<-c(0:variants)

如果我尝试

expand.grid(aa,ab,ac,ad,ae,af,ag,ah,ai,aj)

&#34;无法分配大小的矢量&#34;问题来了..

所以我试着像

一样一步一步走
step<-2 # it is a condition for subsetting the grid
grid_2<-expand.grid(aa,ab)
sub_grid_2<-grid_2[abs(grid_2[,1]-grid_2[,2])<=step,]

这给了我需要的组合。为了节省内存,我添加了另一列,如

  fun_grid_list_3<-function(x){
  a<-sub_grid_2[x,1]
  b<-sub_grid_2[x,2]
  d<-rep(c(1:variants))
  c<-data.frame(Var1=rep(a,variants),Var2=rep(b,variants),Var3=d)
  return(c)
}

    sublist_grid_3<-mclapply(c(1:nrow(sub_grid_2)),fun_grid_list_3,mc.cores=detectCores(),mc.preschedule=FALSE)
sub_grid_3=ldply(sublist_grid_3)

但问题来自于我来到8个以上变量的网格。它需要花费很多时间,但它应该只是在另一个框架中添加一个数字。也许我错了,它真的需要那个时间,但我希望有一个更有效的方法来做到这一点。

我需要的是创建2个变量的expand.grid,然后添加条件以对其进行子集化。然后添加一个尊重子集网格的列(将c(0:variants)添加到每一行,这意味着创建更多行当然......然后按条件对其进行子集等等......

有人可以帮忙加快速度吗?我希望使用mclapply trought函数应该是最快的,但也许不是..

感谢任何人......

0 个答案:

没有答案