当我从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
知道为什么会这样吗?
答案 0 :(得分:3)
查看integer64
变量的equals实现。
`==.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
类的class属性,减去类"integer64"
。
binattr
,创建变量a
是一个相当奇怪的函数,它检查两个输入是否具有兼容的大小,然后返回一个或另一个的属性,具体取决于哪些具有dim
属性。