1

組み合わせの膨大な 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 関数の使用が最速であることを望みましたが、そうではないかもしれません..

誰かのおかげで...

4

0 に答える 0