4

私は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 参照クラスでのフィールド ルックアップ/アクセスのパフォーマンスを向上させるためにできることはありますか? 私が別のことをしなければならないことはありますか?

4

1 に答える 1