首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表中R6元素的浅拷贝和深拷贝

列表中R6元素的浅拷贝和深拷贝
EN

Stack Overflow用户
提问于 2021-01-15 10:00:14
回答 1查看 162关注 0票数 1

下面是一个简单的R6Class

代码语言:javascript
复制
C = R6::R6Class(
    "C",
    public = list(
        x = NULL,

        initialize = function(x)
        {
            self$x=x
        }
    )
)

默认情况下,clone方法采用deep=FALSE (我不知道如何重新定义clone以更改它)。我正在处理类list的实例C。在复制这些列表时,我有时希望引用其中的C对象,有时希望深入复制它们。

这里是一个引用复制的例子

代码语言:javascript
复制
A = list(a1 = C$new(1), a2 = C$new(2))
B = A

print(B[["a1"]]$x) # [1]
A[["a1"]]$x = 4
print(B[["a1"]]$x) # [4]

不过,我很难复制这份清单。我可以

代码语言:javascript
复制
A = list(a1 = C$new(1), a2 = C$new(2))
B = list(a1=A[["a1"]]$clone(deep=TRUE), a2=A[["a2"]]$clone(deep=TRUE))

print(B[["a1"]]$x) # [1]
A[["a1"]]$x = 4
print(B[["a1"]]$x) # [1]

但是,这种技术并不理想,因为我不需要知道列表中每个元素的名称。有什么方便的方法吗?

代码语言:javascript
复制
B = copy_Cinstances_by_reference(A)

代码语言:javascript
复制
B = deep_copy_Cinstances(A)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-15 10:05:00

您可以通过for循环逐个复制列表中的每个元素。不过,我认为在处理大型列表时,这可能会付出性能代价,而且它可能不是最干净的方法。

代码语言:javascript
复制
A = list(a1 = C$new(1), a2 = C$new(2))    

B = list()
for (name in names(A))
{
    B[[name]] = A[[name]]$clone(deep=TRUE)
}

print(B[["a1"]]$x) # [1]
A[["a1"]]$x = 4
print(B[["a1"]]$x) # [1]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65734009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档