如何通过引用修改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)
图书馆(普赖尔)
Persong
只是一个向量,因此它没有引用语义。
即使如此,您也会得到一个新对象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
的引用,而不是整个对象?