如何更改以下行为,以便对象b和c中的插槽名称指向同一个对象?
A<-setClass(Class = "A",
slot = c(name = "character"
)
)
B<-setClass(Class = "B",
slot=c(name = "A"
)
)
a<-A(name="abc")
b<-B(name=a)
c<-B(name=a)
b@name@name="ABC"
b@name@name==c@name@name
答案 0 :(得分:5)
S4类具有标准的R copy-on-write语义,这意味着更新对象没有副作用。对于您想要的语义类型,请使用?ReferenceClasses
NameRef <- setRefClass("NameRef", fields=c(name="character"))
A <- setClass("A", slots=c(nameRef="NameRef"))
然后
> a = b = A(nameRef=NameRef(name="abc"))
> a@nameRef$name = "ABC"
> a@nameRef$name == b@nameRef$name
[1] TRUE
无论在其他编程环境中多么熟悉,参考行为都会让您的R用户感到惊讶,因此请谨慎使用。