一个人可以获得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"
答案 0 :(得分:1)
对于typeof()
,“ mode(x)
,storage.mode(x)
,typeof(x)
”由于以下原因不会返回S3
:
typeof()
的文档似乎很清楚,可能的值包括S4
(但仅包括某些S4
对象)而不是S3
。 (如乔兰所说)。
(原因很可能是S3
对象没有以不同于矢量或列表之类的任何特殊方式在内部存储)。
对于“ mode(x)
,storage.mode(x)
”,如果我们复制从“ {{1} },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
,{ {1}},S4
;但是对于class(x)
,最多可以分别从mode(x)
,storage.mode(x)
获得typeof(x)
,S3
,dummy
,list
, list
,list
。