私はR 参照クラスを使用してコードを書いています。しかし、私が進歩するにつれて、プログラムは耐えられないほど遅くなりました。問題を示すために、次の例を取り上げます。
myClass <- setRefClass(
"Class"="myClass",
fields=c(
counter="numeric"
),
methods=list(
initialize=function () {
counter <<- 0
},
donothing=function () {
},
rand=function () {
return(runif(1))
},
increment=function () {
counter <<- counter + 1
}
)
)
mc <- myClass()
system.time(for (it in 1:500000) {
mc$donothing()
})
system.time(for (it in 1:500000) {
mc$rand()
})
system.time(for (it in 1:500000) {
mc$increment()
})
それはとります:
- メソッド呼び出しの場合は 4 秒
- 乱数を生成する呼び出しの場合は 7
- フィールド値をインクリメントするための 19 秒
問題を引き起こしているのは最後の結果です。明らかに、乱数を生成するよりも数値をインクリメントするのに 2 倍の時間がかかるとは思いません。私のコードには、参照クラスのフィールド値へのアクセスと変更が多数含まれており、このパフォーマンスの問題により、プログラムはほとんど使用可能になりました。
私の質問: R 参照クラスでのフィールド ルックアップ/アクセスのパフォーマンスを向上させるためにできることはありますか? 私が別のことをしなければならないことはありますか?