简体   繁体   English

如何解读is()的output?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM