如果我有一个S4类,比如:
到目前为止还不错。但是,如果我尝试使用以下方式更改“class”:
我现在理解
setClass("MyClass",
representation(
data="data.frame",
name="character"))
并将其实例化(比如说成obj
),
obj <- new('MyClass', data=data.frame(1:3), name='An S4 class')
我将有以下表示:
An object of class "MyClass"
Slot "data":
X1.3
1 1
2 2
3 3
Slot "name":
[1] "An S4 class"
到目前为止还不错。但是,如果我尝试使用以下方式更改“class”:
class(obj) <- "animal"
我现在理解
An object of class "animal"
<S4 Type Object>
attr(,"data")
X1.3
1 1
2 2
3 3
attr(,"name")
[1] "An S4 class"
如果我尝试检查它是否仍然是S4类,则会返回true:
>isS4(obj)
[1] TRUE
到底发生了什么?为什么“slots”变成了属性?这还是一个S4类吗?
更新:
感谢详细的回答。只是想澄清一下,我并不希望这个代码能够正常工作或在实际场景中使用。我只是想更好地理解这种行为背后的机制。 此外,很难选择一个“最佳”答案(它们都非常出色),但是在SO的精神中,我必须选择一个。