如何通过引用修改R6class对象列表?

如何通过引用修改R6class对象列表?,r,oop,r6,R,Oop,R6,请参见以下简短示例: library(R6) library(pryr) Person <- R6Class("Person", public = list(name = NA, hair = NA, initialize = function(name, hair) { if (!missing(name)) self$name <- name if (!missing(hair)) self$hair <- hair }, set_hair = functi

请参见以下简短示例:

library(R6)
library(pryr)

Person <- R6Class("Person", public = list(name = NA, hair = NA, initialize = function(name, 
  hair) {
  if (!missing(name)) self$name <- name
  if (!missing(hair)) self$hair <- hair
}, set_hair = function(val) {
  self$hair <- val
}))
ann <- Person$new("Ann", "black")
address(ann)
#> [1] "0x27e01f0"

ann$name <- "NewName"
address(ann)
#> [1] "0x27e01f0"


ann2 <- Person$new("Ann", "white")

g <- c(ann, ann2)
address(g)
#> [1] "0x32cc2d0"

g[[1]]$hair <- "red"
address(g)
#> [1] "0x34459b8"
库(R6)
图书馆(普赖尔)

Person
g
只是一个向量,因此它没有引用语义。 即使如此,您也会得到一个新对象
g
,它引用相同的对象
ann
ann2
。 您可以通过
地址(g[[1]])进行验证

如果不想更改
g
,则必须从
g
提取对象,然后调用赋值方法

address(g)
##[1] "0000000019782340"

# Extract the object and assign
temp <- g[[1]]
temp$hair <- "New red"

address(g)
[1] "0000000019782340"
#Verify the value on g
g[[1]]$hair
##[1] "New red"

address(g)
#[1] "0000000019782340"
地址(g)
##[1] "0000000019782340"
#提取对象并指定

因此,当我更改
g
时,更改也将发生在
ann
上。这是否意味着
g
存储对
ann
ann2
的引用,而不是整个对象?