在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))