当我没有锁定其中一个字段时,我可以复制一个R5引用类,但如果其中一个字段被锁定,它就不会复制。示例代码如下(锁定调用已注释掉)。我的问题:为什么我不能使用copy()方法复制带有锁定字段的实例?
example <- setRefClass('example',
fields = list(
count = 'numeric',
data = 'data.frame',
d.accessor = function(x) {
if ( !missing(x) )
data <<- x
else
.self$data
}
),
methods = list(
initialize = function( data ) {
if (!missing( data ))
d.accessor <<- data
count <<- 0
},
finalize = function()
print('Bye Bye'),
accumulate = function(x)
count <<- count + x
)
)
#example$lock('data') # write-1, read-many
instance <- example$new() # instantiation
df <- data.frame(x=1, y=2)# example df
instance$d.accessor <- df # 1st set - okay!
copyInst <- instance$copy()
答案 0 :(得分:1)
这是因为当您复制实例时,字段数据将被分配两次,这是锁禁止的。
首先将instance$data
值复制到copyInst$data
,然后将其复制到第二位
将instance$d.accessor
复制到copyInst$d.accessor
,因为d.accessor
是一个getter / setter,以及您定义它的方式,分配给它会导致分配给$data
。
插图:
example$lock('data') # write-1, read-many
instance <- example$new() # instantiation
df <- data.frame(x=1, y=2)# example df
instance$data <- df # 1st assignement: OK
instance$d.accessor <- df #snd assignemnt: ERROR
Error: invalid replacement: reference class field ‘data’ is read-only