R在setRefClass中缓慢分配

时间:2014-07-04 16:08:49

标签: r performance

也许这个问题应该出现在一些编程论坛中,但我想我会在统计界提出这个问题。以下代码说明了在R的setRefClass中执行全局赋值时的问题:

class <- setRefClass("class", 
  fields = list(
    params = "numeric"
  ),
  methods = list(
    initialize = function() {
      params <<- 5
    }, 
    do.stuff = function() {      
      for (i in 1:1e5)
        params <<- 2
    }
))

# FAST:
params <- 5
time <- Sys.time(); for (i in 1:1e5) params <- 2; time <- Sys.time() - time
print(time)

# SLOW:
newclass <- class$new()
time <- Sys.time(); newclass$do.stuff(); time <- Sys.time() - time
print(time)

pqR显示运行时略有改善,但没什么大不了的。

我想知道为什么会发生这种情况......在我看来,分配一个变量应该很快。也许这与定位对象“槽”(可变位置)有关,类似于S3 / S4类。我敢打赌,我只能用R来观察这种行为,而不是C ++。

1 个答案:

答案 0 :(得分:5)

根据定义,将对每个“params”赋值进行错误检查,以确保只存储“数字”数据。如果定义从fields = list(params =“numeric”)更改为fields =“params”,则会更快。