mode(),storage.mode()或typeof()可以返回“ S3”吗?为什么或者为什么不? (他们可以返回“ S4”!)

时间:2019-04-26 18:54:13

标签: r class types storage mode

一个人可以获得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" 

1 个答案:

答案 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" dummyS4S4,{ {1}},S4;但是对于class(x),最多可以分别从mode(x)storage.mode(x)获得typeof(x)S3dummylistlistlist