Что касается 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)
.