gpt4 book ai didi

r - 如何解释 is() 的输出?

转载 作者:行者123 更新时间:2023-12-04 08:01:21 25 4
gpt4 key购买 nike

当我调用 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", 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
我们可以检查一个对象是否扩展到一个特定的类。
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(*, "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
有关 "data.frameRowLabels" 的更多信息类可以在 documentation for package ‘methods’ 中找到.

关于r - 如何解释 is() 的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66451053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com