2016-12-23 6 views
0

私は現在、Rプログラムに取り組んでいます。このプログラムの一部は、相互依存性のあるループの2つの値を計算します。私は10万回の反復をしなければならないので、それは非常に長い時間がかかります。R:このループをどのように変更して適用できますか?

私はこのループを適用ループまたはより効率的な関数の代わりに使用したいと思いますが、その方法はわかりません。誰か助けてくれますか?

p <- c() 
for(i in 1:n) { 
    if(i == 1) { 
    x <- b[i] 
    } 
    else { 
    x <- c(x, max(h[i - 1], p[i])) 
    } 
    h <- c(h, x[i] + y[i]) 
} 

ありがとうございます!

+2

「p」に値を割り当てるのは何ですか? 'h'は' p'sであるはずですか? –

+2

上記のあなたの質問は、x、y、p、b、hとは何かがあまり明確ではありませんか?アドバイスの1つ:x <-c(x、addnewvalue)の表記法を使用してベクトルに連続して追加するのは時間がかかります。 x <-vector(n)を事前に割り当て、x [i]で値を代入します。 – Dave2e

答えて

5

ここでは完全な実例はないようですが、xhのベクトルを構築するには、c()の機能が非常に遅いという大きな問題があります。

x <- numeric(n) # allocate vector of size n 
h <- numeric(n) 

を、あなたがx[i]h[i]に割り当てることで行くようにし、それらを記入:それはそれらを事前に割り当てる方が良いでしょう。たとえば、次のループ:

x <- c(); for (i in 1:100000) x <- c(x,1) 

は私のラップトップ上で実行するのに約10秒かかりますが、このバージョン:ほぼ瞬時に実行している間

x <- numeric(100000); for (i in 1:100000) x[i] <- 1 

は同じことを行います。

関連する問題