如何解决如何解释 is() 的输出?
> is(a)
[1] "integer" "double" "numeric"
[4] "vector" "data.frameRowLabels"
这些信息告诉我们什么?为什么我们有三个不同的属性,比如integer,double and numeric in [1]
,
这里的 data.frameRowLabel
是什么意思?
解决方法
在没有第二个参数的情况下调用 is(object,class2)
为我们提供了对象的 class
(第一个元素)以及扩展(以下元素),
a <- 1:10
class(a)
# [1] "integer"
is(a)
# [1] "integer" "double" "numeric"
# [4] "vector" "data.frameRowLabels"
对应"integer"
的类定义。
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
检查 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",distance 2
# Class "ObjectsWithPackage",distance 2
# Class "factor",by class "integer",distance 2
# Class "ordered",distance 3
## also try:
getClassDef("numeric")
getClassDef("vector")
getClassDef("double") ## lists `"integer"` as subclass
我们可以检查一个对象是否扩展到一个特定的类。
is(a,"integer")
# [1] TRUE
is(a,"Date")
# [1] FALSE
## compare
is(Sys.Date(),"Date")
# [1] TRUE
扩展和模式是不同的东西:
is(a,"double")
# [1] TRUE
## but
is.double(a) ## tests the mode not the class resp. extend!
# [1] FALSE
为了测试对象和类之间的继承关系,我们可以使用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
没有第二个参数,我们得到所有的扩展:
extends("integer")
# [1] "integer" "double" "numeric"
# [4] "vector" "data.frameRowLabels"
使用 fullInfo=TRUE
给出所有 is
关系的完整定义。有关详细信息,请参阅 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(*,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(*,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(*,value)
# .. ..@ simple : logi TRUE
# .. ..@ by : chr(0)
# .. ..@ dataPart : logi FALSE
# .. ..@ distance : num 1
# $ integer : logi TRUE
有关 "data.frameRowLabels"
类的更多信息可以在 documentation for package ‘methods’ 中找到。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。