2012-11-10 38 views
2

我想在R中創建一個新的類,它基本上應該像vector類,只不過vector中的每個元素都有'start-time'和'end-time'兩個附加屬性。部分功能應該是各種常規索引。如何在R中創建一個允許向量索引的S4類?

至少提供一點這裏的代碼是我的嘗試:

setClass(
     Class = "Intervals", 
     representation = representation(
     start.time = "POSIXct", 
     end-time = "POSIXct", 
     numbers = "numeric"), 
     contains = "vector" 
    ) 

這顯然是行不通的,因爲後

iv <- function(start.time, end.time, numbers) { 
    new(Class="Intervals", start.time = start.time, 
     end.time = end.time, numbers = numbers) 
} 

st <- seq(1,5)*3600+as.POSIXct("1970-01-01 01:00") 
et <- seq(2,6)*3600+as.POSIXct("1970-01-01 01:00") 
numbers <- c(1,2,3,4,5) 
example <- iv(st,et,numbers) 

例如[1 :3]例如給我NA NA NA。

還是我寫我自己,吸氣的東西,如

setMethod(
    f = "[", 
    signature="Intervals", 
    definition=function(x,i,j,drop){ 
... 

開始?當然,我想避免這一點,因爲我不知道如何處理參數x,我,j,正確地下降。

我需要插槽'數字'嗎?是否有從虛擬類向量繼承的方法,允許我省略它?此外,我不想限制包含數值的向量上的結構。

我希望這個問題不是微不足道的,但我讀了書和pdf中的不同章節,而沒有自己找到解決方案。

非常感謝。

Mika

+0

您需要自己編寫該方法,但它會相當簡單,因爲您可以將參數傳遞給子文件。 – hadley

+0

也許[這個問題](http://stackoverflow.com/questions/10961842/how-to-define-the-subset-operators-for-a-s4-class)是否足夠接近? –

+0

是的。發佈後10分鐘我發現了它(不幸)。 –

回答

2

好的。同時,我管理(與How to define the subset operators for a S4 class?幫助)拿出(後更名一些):

setMethod(
    f = "[", 
    signature="Intervals", 
    definition=function(x,i,j,...,drop=TRUE){ 
    initialize(x, [email protected][i], [email protected][i], values = [email protected][i]) 
    } 
) 

只是如果有人有興趣.. show方法看起來是這樣的。

setMethod(
    f = "show", 
    signature="Intervals", 
    definition=function(object){ 
    rownames <- sapply(seq_along([email protected]), 
         function (i) paste([email protected][i], "--", [email protected][i])) 
    df.show <- data.frame([email protected], row.names = rownames) 
    names(df.show) <- ifelse(length(names([email protected])) == 0, 
          "Values", names([email protected])) 
    print (df.show) 
    } 
) 
相關問題