r - "User"R中R6类的构造函数

标签 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类中,但我不知道如何调用它。

最佳答案

由于 R6 类实际上是环境,因此您可以使用 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 

关于r - "User"R中R6类的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35881234/

相关文章:

r - 在 R 中查找多列的平均值

从R中列表列的所有列表中删除特定数字

R match.fun 看不到导入包的功能

r - 以交互方式更改 selectInput 选项

R:在对象生成器中使用事件绑定(bind)有条件地向 R6 对象添加新类

R:如何为R6类定义多个构造函数?

r - 如何添加水平线显示ggplot2中所有组的平均值?

r - 在面向对象的 R 编程中,什么是 "active binding"?

r - 在 RStudio 的 R 包中记录 R6 类和方法

r - 在 R6Class 中创建动态方法,print(ls.str()) 的魔力