我正在创建同一个类的多个 R6 对象,我的cl
类包含一些繁重的方法。
正如我的理解 - 下面的代码 - 似乎每个对象都有它自己的所有方法的副本。
我怎样才能拥有所有cl
对象的单一方法副本?S3 只存储方法的单个副本,不是吗?
我想为数千个cl
对象缩放它,所以宁愿省略开销。
library(R6)
cl <- R6Class(
classname = "cl",
public = list(
a = numeric(),
b = numeric(),
initialize = function(x){ self$a <- rnorm(1, x); self$b <- rnorm(1, x) },
heavy_method = function() self$a + self$b,
print = function() self$heavy_method())
)
group_of_cl <- lapply(1:3, cl$new)
lapply(group_of_cl, ls.str)
## [[1]]
## a : num 1.7
## b : num 0.898
## heavy_method : function ()
## initialize : function (x)
## print : function ()
##
## [[2]]
## a : num 2.64
## b : num -0.29
## heavy_method : function ()
## initialize : function (x)
## print : function ()
##
## [[3]]
## a : num 3.66
## b : num 1.72
## heavy_method : function ()
## initialize : function (x)
## print : function ()
library(data.table)
sapply(lapply(group_of_cl, `[[`, "heavy_method"),address)
## [1] "0x31de440" "0x3236420" "0x32430a8"