2012-10-01 52 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」)一樣的行爲。因此,我喜歡馬丁的評論。 –