"用户" R中R6类的构造函数

时间:2016-03-09 01:22:07

标签: r r6

我正在学习如何使用R6类(通常是R OO)。

this tutorial中,我发现了一种有趣的方式来呈现构造函数。 在6.3节中,定义了一种不同类型的构造函数,用" new"返回一个类实例。在函数内部调用。

这类似于使用计算某些东西的函数初始化类对象的行为,这对我的目的很有用。

我想知道这是否可以在R6中完成,如果有的话,如果有资源我可以学习如何正确地做到这一点。

我在S4中的例子如下:

ERes <- setClass("ERes",
              representation = representation(
                  eTable = 'data.table',
                  eList = 'list'
                )
              )

setERes <- function(someData){
    return(new(Class = 'ERes', eTable = table(someData), eList = as.list(someData)))
}

现在,创建eTableeList的代码会有点复杂,但这就是原则。用户不需要调用$ new,而是需要返回适当对象的函数。 我认为我可以将该函数放在R6类中,但我不确定如何调用它。

1 个答案:

答案 0 :(得分:1)

由于R6类实际上是envoronments,因此您可以使用className$constructorName来实现此结果。

library(R6)

ERes <- R6Class(
  "ERes",
  public = list(
    eTable = NULL,
    eList = NULL,
    initialize = function(eTable, eList){
      self$eTable <- eTable
      self$eList <- eList
    }
  )
)

ERes$userConstructor <- function(someData){
  ERes$new(table(someData), as.list(someData))
}

myObject <- ERes$userConstructor(rpois(100, 5))

myObject$eTable
# someData
#  0  1  2  3  4  5  6  7  8 10 
#  3  3  7 16 16 20 14 10  9  2