2012-10-01 3 views
2

다음 예에서 "myclass"가 왜 사라지나요? 어떻게 피할 수 있습니까?myclass에는 어떤 현상이 발생 했습니까?

# 
library(xts) 

# sample data 
fo <- "%Y-%m-%d %X" 
st <- Sys.time() 
delta <- seq(from=0, by=10, length.out=10) 
ma1 <- matrix(data=sin(delta/50), ncol=1, nrow=10) 
ma2 <- matrix(data=sin(delta/25), ncol=1, nrow=10) 
d1a <- xts(x=ma1, order.by=strptime(st, format=fo) + delta) 
d2a <- xts(x=ma2, order.by=strptime(st, format=fo) + delta) 
d1b <- xts(x=ma1, order.by=strptime(st, format=fo) + delta) 
d2b <- xts(x=ma2, order.by=strptime(st, format=fo) + delta) 
d1c <- xts(x=ma1, order.by=strptime(st, format=fo) + delta) 
d2c <- xts(x=ma2, order.by=strptime(st, format=fo) + delta) 

# original class 
class(d1a) 
class(d2a) 
# 
d3a <- d1a + d2a 

# class 
class(d1b) <- "myclass" 
class(d2b) <- "myclass" 
# 
d3b <- d1b + d2b 

# class 
class(d1c) <- c("myclass","xts","zoo") 
class(d2c) <- c("myclass","xts","zoo") 
# 
d3c <- d1c + d2c 

# 
class(d3a) 
[1] "xts" "zoo" 
class(d3b) 
[1] "myclass" 
class(d3c) 
[1] "xts" "zoo" # expected was "myclass" "xts" "zoo" 

답변

2
당신이 myclass에 대한 + 방법을 정의하지 않은, 그래서 XTS 방법이 발송됩니다 때문에 아주 간단하게

, ... 그리고 그것은 XTS-클래스 객체를 반환합니다.

Ops.myclass <- xts:::Ops.xts 
+0

는 더 좋은 XTS는에 속 들어오는 인스턴스의 부분을 업데이트하고 들어오는 클래스를 유지 객체를 반환하지 않을까요 :

이 쉽게 정의에 의해 해결 될 수 있는가? –

+0

@MartinMorgan : 예, 이미 할 일 목록에 추가했습니다. –

+0

xts 메소드 디스패치에 대해서는 동의하지만 클래스 (d1x) <- c ("myclass", "matrix")를 클래스 c ("myclass", "matrix")에서 다시 사용하는 경우와 같은 동일한 동작을 기대합니다. 그러므로 저는 Martin의 코멘트를 좋아합니다. –

관련 문제