人们可以得到S4
作为mode()
,storage.mode()
,typeof()
的结果,如下所示。那么,S3
的情况怎么样?为什么或者为什么不?
storing <- function(x) {print(c(class(x), mode(x), storage.mode(x), typeof(x)))}
setClass("dummy", representation(x="numeric", y="numeric"))
S4DummyObject = new("dummy", x=1:20, y=rnorm(20))
storing(S4DummyObject) # "dummy" "S4" "S4" "S4"
至于typeof()
,“mode(x)
,storage.mode(x)
,typeof(x)
”不返回S3
,因为:
typeof()
的文档似乎很清楚,可能的值包括S4
,(但只有一些S4
对象)而不是S3
。 (正如约兰所说)。
(原因很可能是S3
对象不是以任何特殊方式存储在内部,而不是像向量或列表那样)。
至于“mode(x)
,storage.mode(x)
”,可以通过观察如果我们复制我们从“S4
,mode(x)
”获得storage.mode(x)
作为返回值的情况来观察会发生什么。
new_s3_lst <- function(x, ..., class) {
stopifnot(is.list(x))
stopifnot(is.character(class))
structure(x, ..., class = class)
}
new_s3_scalar <- function(..., class) { new_s3_lst(list(...), class = class) }
S3DummyObject = new_s3_scalar(class="dummy")
class(S3DummyObject) # "dummy"
storing <- function(x) {print(c(class(x), mode(x), storage.mode(x), typeof(x)))}
storing(S3DummyObject) # "dummy" "list" "list" "list"
所以,人们可以分别获得dummy
,S4
,S4
,S4
作为class(x)
,mode(x)
,storage.mode(x)
,typeof(x)
的返回值;但对于S3
,最多dummy
,list
,list
,list
分别可以从class(x)
,mode(x)
,storage.mode(x)
,typeof(x)
获得。