組み合わせの膨大な data.frame を作成する必要がありますが、すべてが必要なわけではありません。しかし、ここで見たように、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)
「サイズのベクトルを割り当てることができません」という問題が発生します..
だから私は次のように一歩一歩進んでみました
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 関数の使用が最速であることを望みましたが、そうではないかもしれません..
誰かのおかげで...