我正在学习如何使用 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)))
}
现在,创建eTable
和eList
的代码会稍微复杂一些,但这就是原理。用户不需要调用$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/