2

当我从 bit64 对 integer64 对象进行子类化然后执行相等测试时,结果包含逻辑数据,但仍归入我的类而不是逻辑。例如,整数不会发生这种情况。

示例代码:

library(bit64)
x = as.integer64(5)
class(x) = c("Foo", "integer64")
x == 5

返回

[1] TRUE
attr(,"class")
[1] "Foo"

请注意,它仍然有类“Foo”

而如果我们对整数做同样的事情:

y = as.integer(5)
class(y) = c("Foo", "integer")
y == 5

它返回逻辑

[1] TRUE

知道为什么会这样吗?

4

1 回答 1

3

查看 equalsinteger64变量的实现。

`==.integer64`
function (e1, e2) 
{
    a <- binattr(e1, e2)
    e1 <- as.integer64(e1)
    e2 <- as.integer64(e2)
    ret <- logical(max(length(e1), length(e2)))
    .Call("EQ_integer64", e1, e2, ret)
    a$class <- minusclass(a$class, "integer64")
    setattributes(ret, a)
    ret
}

返回值被显式地赋予一个类属性,该类属性等于 的类a,减去类"integer64"

binattr,创建变量a是一个相当奇怪的函数,它检查两个输入是否具有兼容的大小,然后返回一个或另一个的属性,具体取决于哪些具有dim属性。

于 2013-02-11T14:46:44.643 回答