gpt4 book ai didi

r - 加速 R 引用类中的字段访问

转载 作者:行者123 更新时间:2023-12-01 02:19:23 25 4
gpt4 key购买 nike

我一直在使用 R reference classes 编写代码.然而,随着我的进步,程序变得慢得令人无法忍受。为了演示这个问题,举个例子:

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 秒
  • 7s调用生成随机数
  • 19s 增加一个字段值

  • 这是给我带来问题的最后一个结果。我显然不希望增加一个数字比生成一个随机数花费两倍的时间。我的代码涉及大量访问和更改引用类中的字段值,而这个性能问题使程序几乎可用。

    我的问题: 我能做些什么来提高 R 引用类中字段查找/访问的性能吗?有什么我应该做的不同的事情吗?

    最佳答案

    似乎一个主要的性能问题是由于在 fields 中提供了类名。争论。如果我更换

    fields=c(
    counter="numeric"
    ),


    fields=c("counter")

    与 19 秒相比,计算在 5 秒内完成。很难从文档中确定为什么性能损失如此之大——可能是由于在分配期间检查类。 documentation提到以下内容:

    In particular, fields with a specified class are implemented as a special form of active binding to enforce valid assignment to the field



    我不太确定“主动绑定(bind)”是什么,但我认为它引入了一些预分配逻辑。

    关于r - 加速 R 引用类中的字段访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21665838/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com