2

integer64オブジェクトをbit64からサブクラス化してから等価性テストを実行すると、結果には論理データが含まれますが、論理的ではなく、クラスでクラス化されます。これは、たとえば整数では発生しません。

サンプルコード:

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

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戻り値には、クラスからクラスを引いたものに等しいクラス属性が明示的に与えられます"integer64"

binattr、変数を作成するのaはかなり奇妙な関数であり、2つの入力が互換性のあるサイズであることを確認し、どちらが属性を持っているかに応じて、どちらか一方の属性を返しdimます。

于 2013-02-11T14:46:44.643 に答える