在R中的引用类的initialize()方法中自动赋值
我正在使用一个包含几十个字段的参考类。我已经设置了一个在R中的引用类的initialize()方法中自动赋值,r,reference-class,R,Reference Class,我正在使用一个包含几十个字段的参考类。我已经设置了一个initialize()方法,该方法接收列表对象。虽然有些字段依赖于列表元素的进一步计算,但大多数字段是直接从列表元素分配的,如下所示: fieldA <<- list$A fieldB <<- list$B fieldA使用.self来指示实例,并使用[[选择字段。我不是100%确定(但谁是呢?)[[是严格合法的。我添加了默认值lst,因此它在作为C$new()调用时工作,S4中的一个隐式假设,似乎可能以类似的方式
initialize()
方法,该方法接收列表对象。虽然有些字段依赖于列表元素的进一步计算,但大多数字段是直接从列表元素分配的,如下所示:
fieldA <<- list$A
fieldB <<- list$B
fieldA使用.self
来指示实例,并使用[[
选择字段。我不是100%确定(但谁是呢?)[[
是严格合法的。我添加了默认值lst
,因此它在作为C$new()调用时工作
,S4中的一个隐式假设,似乎可能以类似的方式影响引用类
C <- setRefClass("C",
fields=list(a="numeric", b="numeric", c="character"),
methods=list(
initialize=function(..., lst=list(a=numeric(), b=numeric(), c=character())
{
directflds <- c("a", "b")
for (elt in directflds)
.self[[elt]] <- lst[[elt]]
.self$c <- as.character(lst[["c"]])
.self
}))
c <- C$new(lst=list(a=1, b=2, c=3))
C
for field in c('A', 'B', 'C', 'D'))
do.call('<<-' c(field, list[[field]]))
C <- setRefClass("C",
fields=list(a="numeric", b="numeric", c="character"),
methods=list(
initialize=function(..., lst=list(a=numeric(), b=numeric(), c=character())
{
directflds <- c("a", "b")
for (elt in directflds)
.self[[elt]] <- lst[[elt]]
.self$c <- as.character(lst[["c"]])
.self
}))
c <- C$new(lst=list(a=1, b=2, c=3))
B <- setRefClass("B",
fields=list(a="numeric", b="numeric", c="character"),
methods=list(
initialize=function(..., c=character()) {
callSuper(...)
.self$c <- as.character(c)
.self
}))
b0 <- B$new(a=1, b=2, c=3)
b1 <- do.call(B$new, list(a=1, b=2, c=3))