2013-02-11 4 views
2

integer64 객체를 bit64에서 하위 클래스로 만들고 평등 테스트를 수행하면 결과에 논리 데이터가 포함되지만 논리적 데이터가 아닌 내 클래스로 분류됩니다. 이것은 예를 들어 정수에서는 발생하지 않습니다.integer64의 하위 클래스가 논리 연산 후 남음

샘플 코드 :

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

반환 여전히

을 클래스 "푸"를 가지고

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

공지 동안 우리는 정수와 동일 할 경우 :

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

logi를 반환합니다. cal

[1] TRUE 

왜 이런 생각입니까?

답변

3

integer64 개의 변수에 대해 같음을 확인하십시오.

`==.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, 즉 그 사람이 dim 특성이 어느 한쪽 따라 어느시의 특성을 리턴 변수 a 두 입력 호환 크기임을 확인 오히려 홀수 함수 생성한다.

+1

좋은 점 - 왜 그런 짓을 했을까? – Corone

+0

난폭 한 추측 : 주된 관심사는 결과에 '희미한'속성을 복사하는 것이므로 매트릭스 입력이 병합되지 않는다고 생각합니다. 클래스를 복사하면 특별한 방법 (예 : 인쇄)이 유지됩니다. –