gpt4 book ai didi

r - 复制带有锁定变量的 R5 引用类

转载 作者:行者123 更新时间:2023-12-04 21:46:53 25 4
gpt4 key购买 nike

当我没有锁定其中一个字段时,我可以复制 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()

最佳答案

因为复制实例时,字段数据会被赋值两次 ,这是 禁止的锁 .
它将首先通过复制 instance$data 分配值(value)成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

关于r - 复制带有锁定变量的 R5 引用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13106897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com