我需要创建庞大的数据框架组合,但我并不需要它们。但正如我在这里看到的那样,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函数应该是最快的,但也许不是..
感谢任何人......