[英]How to interpret the output of is()?
When I call a is
function over a single variable, I got the following information.当我在单个变量上调用 a
is
function 时,我得到了以下信息。
> is(a)
[1] "integer" "double" "numeric"
[4] "vector" "data.frameRowLabels"
What does these information tell us?这些信息告诉我们什么? Why We have three different attributes, such as
integer, double and numeric in [1]
,为什么我们有三个不同的属性,例如
integer, double and numeric in [1]
,
and what does data.frameRowLabel
mean here? data.frameRowLabel
在这里是什么意思?
Calling is(object, class2)
without second argument gives us the class
of the object (the first element) as well as the extends (the following elements),在没有第二个参数的情况下调用
is(object, class2)
会给我们class
(第一个元素)的 class(第一个元素)以及 extends(以下元素),
a <- 1:10
class(a)
# [1] "integer"
is(a)
# [1] "integer" "double" "numeric"
# [4] "vector" "data.frameRowLabels"
corresponding to the class definition of "integer"
.对应于
"integer"
的 class 定义。
getClassDef("integer")
# Class "integer" [package "methods"]
#
# No Slots, prototype of class "integer"
#
# Extends:
# Class "double", directly, with explicit coerce
# Class "numeric", directly
# Class "vector", directly
# Class "data.frameRowLabels", directly
#
# Known Subclasses:
# Class "factor", from data part
# Class "ordered", by class "factor", distance 2
Checking the definitions of the other classes of is(a)
reveals that "integer"
is a subclass of them.检查
is(a)
的其他类的定义表明"integer"
是它们的子类。
selectSuperClasses("integer") ## don't know why `"double"` isn't listed there...!
# [1] "numeric" "vector" "data.frameRowLabels"
getClassDef("data.frameRowLabels")
# Extended class definition ( "ClassUnionRepresentation" )
# Virtual Class "data.frameRowLabels" [package "methods"]
#
# No Slots, prototype of class "character"
#
# Known Subclasses:
# Class "character", directly
# Class "integer", directly
# Class "signature", by class "character", distance 2
# Class "className", by class "character", distance 2
# Class "ObjectsWithPackage", by class "character", distance 2
# Class "factor", by class "integer", distance 2
# Class "ordered", by class "integer", distance 3
## also try:
getClassDef("numeric")
getClassDef("vector")
getClassDef("double") ## lists `"integer"` as subclass
We may check if an object extends to a specific class.我们可能会检查 object 是否延伸到特定的 class。
is(a, "integer")
# [1] TRUE
is(a, "Date")
# [1] FALSE
## compare
is(Sys.Date(), "Date")
# [1] TRUE
Extend and mode are different things:扩展和模式是不同的东西:
is(a, "double")
# [1] TRUE
## but
is.double(a) ## tests the mode not the class resp. extend!
# [1] FALSE
To test inheritance relationships between an object and a class we may use extends(class1, class2, maybe = TRUE, fullInfo = FALSE)
:为了测试 object 和 class 之间的 inheritance 关系,我们可以使用
extends(class1, class2, maybe = TRUE, fullInfo = FALSE)
:
extends("integer", "double")
# [1] TRUE
test1 <- c("integer", "double", "numeric", "vector", "data.frameRowLabels",
"character", "factor", "foo")
mapply(function(x, y) extends(y, x), test, "integer")
# integer double numeric vector
# TRUE TRUE TRUE TRUE
# data.frameRowLabels character factor foo
# TRUE FALSE FALSE FALSE
Without second argument we get all the extends:没有第二个参数,我们得到所有的扩展:
extends("integer")
# [1] "integer" "double" "numeric"
# [4] "vector" "data.frameRowLabels"
Using fullInfo=TRUE
gives the complete definitions of all the is
-relations.使用
fullInfo=TRUE
给出所有is
关系的完整定义。 See SClassExtension-class for further information.有关详细信息,请参阅SClassExtension-class 。
ex <- extends("integer", fullInfo=TRUE)
str(ex)
# List of 5
# $ double :Formal class 'SClassExtension' [package "methods"] with 10 slots
# .. ..@ subClass : chr "integer"
# .. .. ..- attr(*, "package")= chr "methods"
# .. ..@ superClass: chr "double"
# .. .. ..- attr(*, "package")= chr "methods"
# .. ..@ package : chr "methods"
# .. ..@ coerce :function (from, strict = TRUE)
# .. ..@ test :function (object)
# .. ..@ replace :function (from, to, value)
# .. ..@ simple : logi FALSE
# .. ..@ by : chr(0)
# .. ..@ dataPart : logi FALSE
# .. ..@ distance : num 1
# $ numeric :Formal class 'SClassExtension' [package "methods"] with 10 slots
# .. ..@ subClass : chr "integer"
# .. .. ..- attr(*, "package")= chr "methods"
# .. ..@ superClass: chr "numeric"
# .. .. ..- attr(*, "package")= chr "methods"
# .. ..@ package : chr "methods"
# .. ..@ coerce :function (from, strict = TRUE)
# .. ..@ test :function (object)
# .. ..@ replace :function (from, to, value)
# .. ..@ simple : logi TRUE
# .. ..@ by : chr(0)
# .. ..@ dataPart : logi FALSE
# .. ..@ distance : num 1
# $ vector :Formal class 'SClassExtension' [package "methods"] with 10 slots
# .. ..@ subClass : chr "integer"
# .. .. ..- attr(*, "package")= chr "methods"
# .. ..@ superClass: chr "vector"
# .. .. ..- attr(*, "package")= chr "methods"
# .. ..@ package : chr "methods"
# .. ..@ coerce :function (from, strict = TRUE)
# .. ..@ test :function (object)
# .. ..@ replace :function (from, to, value)
# .. ..@ simple : logi TRUE
# .. ..@ by : chr(0)
# .. ..@ dataPart : logi FALSE
# .. ..@ distance : num 1
# $ data.frameRowLabels:Formal class 'SClassExtension' [package "methods"] with 10 slots
# .. ..@ subClass : chr "integer"
# .. .. ..- attr(*, "package")= chr "methods"
# .. ..@ superClass: chr "data.frameRowLabels"
# .. .. ..- attr(*, "package")= chr "methods"
# .. ..@ package : chr "methods"
# .. ..@ coerce :function (from, strict = TRUE)
# .. ..@ test :function (object)
# .. ..@ replace :function (from, to, value)
# .. ..@ simple : logi TRUE
# .. ..@ by : chr(0)
# .. ..@ dataPart : logi FALSE
# .. ..@ distance : num 1
# $ integer : logi TRUE
Some more information on the "data.frameRowLabels"
class can be found in the documentation for package 'methods' .有关
"data.frameRowLabels"
class 的更多信息,请参阅package 'methods' 的文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.