r - R6 类变量

标签 r r6

我很好奇是否有办法在类的定义中为 R6 类创建类变量?我通读了Introduction to R6 classes小插图,但没有发现任何提及类变量。我可以在使用 ClassName$variableName <- initial_value 创建类后创建类变量但很好奇是否有办法在实际的类定义中做到这一点。

例如,考虑 Person下面的类,它有一个类变量count跟踪 Person 的数量已实例化的对象:

library(R6)

Person <- R6Class("Person",
  public = list(
    name = NA,

    initialize = function(name) {
      Person$count <- Person$count + 1
      if (!missing(name)) self$name <- name
    }
  )
)

Person$count <- 0

Person$count # 0
john <- Person$new("John")
Person$count # 1
james <- Person$new("James")
Person$count # 2

最佳答案

不完全是您所要求的,但这可能会有所帮助。您可以向类添加环境以存储在类的所有实例之间共享的变量。由于环境的引用语义,每当新的 Person 出现时,此环境都不会重置。创建实例。

这是一个例子

library(R6)

Person = R6Class(
  "Person",
  public = list(
    name = NA,
    initialize = function( name ){
      if (!missing(name)) self$name <- name
      counter = self$getCounter()
      private$shared_env$counter = counter + 1
    },
    getCounter = function(){
      counter = private$shared_env$counter
      if( is.null( counter ) )
        counter =  0
      return( counter )
    }
  ),
  private = list(
    shared_env = new.env()
  )
)

测试代码
john <- Person$new("John")
john$getCounter()
# 1
james <- Person$new("James")
james$getCounter()
# 2
john$getCounter()
# 2

您可以将此方法与事件绑定(bind)结合起来,以制作像 john$counter 这样的东西。等也可以。如果要在对象被销毁时减少计数器,请使用 finalize R6 中的方法.

关于r - R6 类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33068778/

相关文章:

r - dcast 警告 : ‘Aggregation function missing: defaulting to length’

R:对列表中每个列表的元素求和,并在数据框中返回结果

r - 为不在包中的 R6 类创建 Rd 文档文件

r - 有没有办法将 R6 对象分配给 S4 对象槽?

r - 如何调用R6父类中的函数,其中父函数依赖于其他重写的辅助函数

string - 如何根据字符串字符对向量进行子集化?

r - 使用 plotlyProxyInvoke 在不调整绘图大小的情况下向绘图添加垂直线

r - SQL 从 R 创建表 - 字符串数据,右截断

r - 更改 R6 类的子类中的初始化方法

r - 如何在 golem Shiny 应用程序中包含 R6 对象以跨模块共享数据