如何指向S4对象?

时间:2013-09-05 08:10:32

标签: r s4

如何更改以下行为,以便对象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

1 个答案:

答案 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用户感到惊讶,因此请谨慎使用。