gpt4 book ai didi

r - is.vector() 什么时候返回 true?

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

我对R比较陌生,在看文档的时候,下面这句话让我很困惑。

is.vector() does not test if an object is a vector. Instead it returns TRUE only if the object is a vector with no attributes apart from names.

other thread关于为什么 is.vector() 为列表返回 TRUE 可能是一个很好的引用。

is.vector() 什么时候返回 true?

最佳答案

is.vector() does not test if an object is a vector. Instead it returns TRUE only if the object is a vector with no attributes apart from names.

这句话的意思就是它所说的。 为什么它说的更微妙。

所有 R 对象都与“属性”列表相关联,可通过 attributes() 查看(对于整个列表)与 attr() (对于个别属性)。事实上,对象的类实际上只是通用 (S3) 函数用来确定使用哪种方法的特殊属性。

此属性在大多数情况下趋于“安静”,但在 na.omit() 的输出中可见功能(尝试 x <- c(1, NA); y <- na.omit(x); print(y) 看看它看起来如何)。在这里,y有一个属性,na.action ,它本身是一个具有属性的对象,class .使用 z <- attr(y, "na.action") 将该属性分配给单独的对象并使用 attributes(z) 查看其属性然后 attr(z, "class") .

class属性存在,R 用它来覆盖底层对象的类;在这种情况下 omit类覆盖内部 integer类(class)。尝试 attr(z, "class") <- NULL; class(z) .请注意,这与直接写入 class(z) <- NULL 的结果相同。 .

现在给 z 赋值 z <- attr(y, "na.action")再次。尝试 is.vector(z) .然后用 NULL 删除它的类再试一次 is.vector(z)再次。希望这应该弄清楚什么是is.vector检查。事实class属性在方法调度中有特殊用途是无关紧要的。事实上,你可以为 y 做同样的事情。 :尝试is.vector(y) , is.vector(x[!is.na(x)]) .

采用此标准的原因是 R 中许多看起来或行为不像向量的对象在内部存储为向量。矩阵属于此类。尝试像 x <- matrix(1:4, 2); dput(x) 这样的东西.你会注意到 x在内部保存为向量 1:4 ,具有特殊属性 .Dim .这个属性是隐藏的,不可访问的;尝试 attr(x, ".Dim") .

这一切都记录在 R 手册的某处(这是我第一次看到它的地方),但我不记得是哪一节了。

关于r - is.vector() 什么时候返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26610129/

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