2016-06-20 5 views
1

は例です:(L、S)適用ファミリを使用してRでこのネストループを最適化するにはどうすればよいですか?ここ

result <- array(1, c(7,7,7)) 
for(i in 1:7){ 
    for(j in 1:7){ 
    for(k in 1:7){ 
     result[i,j,k] <- i*j*k 
    } 
    } 
} 
+2

を使用するのと同じである(:7,1:外側(1 7)、1:7)' "結果" を取得します。 「結果」を埋める実際の計算は何ですか? –

+0

あなたは働く人々のためにいくつかのデータを提供する必要があります。 – gung

+0

実際の値は別のデータフレームです。私はインデックスとしてi、j、kを使ってこのデータフレームと呼んでいます。 –

答えて

4

を使用することができます。これは `外使用することができ、このたとえばouter

> 1:7 %o% 1:7 %o% 1:7 

> identical(result, 1:7 %o% 1:7 %o% 1:7) 

library("microbenchmark") 

> microbenchmark(1:7 %o% 1:7 %o% 1:7, forloop = for(i in 1:7){ 
+ for(j in 1:7){ 
+  for(k in 1:7){ 
+  result[i,j,k] <- i*j*k 
+  } 
+ } 
+ }) 
Unit: microseconds 
       expr  min  lq  mean median  uq  max neval 
1:7 %o% 1:7 %o% 1:7 19.673 21.3000 30.54441 26.030 30.4610 269.072 100 
      forloop 680.274 693.1025 730.68298 703.042 716.6775 1367.285 100 
1

たぶん、あなたはあなたがループよりもはるかに高速である%o%を使用することができ、この

result <- array(apply(expand.grid(1:7,1:7,1:7),1,prod),c(7,7,7)) 
関連する問題