1

私は R の初心者で、次の単純なループを作成しました。

for(i in 1:12000){
    if(v$piano.tariff[i] == 2) {v$piano.tariff[i] = 0}
    else {v$piano.tariff[i] = 1}
}

ここで、v はデータ フレームで、piano.tariff はその列の 1 つです。ループが行うことは、piano.tariff 列の各値を初期値の 2 と 5 から 1 または 0 に変更するだけです。

これでコードは機能しますが、問題は途方もなく遅いことです。 完了するまでに最大4 ~ 5 分かかります。C++ o C# では、このようなループはほとんど数秒しかかかりません。

なぜこれはとても遅いのですか?これを実装するより速い方法はありますか?それとも単に R が遅いだけで、それだけですか?

4

3 に答える 3

1

一般に、R のループには注意する必要がありますが、より具体的にv$piano.tariff[i] = v$piano.tariff[i]+1は、ベクトル全体が再割り当てされるようなループ内の代入に注意する必要があります。

詳細については、この種の問題に関する Patrick Burns のオンライン ブックThe R Infernoを参照してください。

于 2013-04-08T09:20:50.227 に答える