2014-09-21 76 views
4

我有一個用戶定義的對象,它有一個具有3個屬性的類。重新編碼'[.data.table'

i.e. > class(data) 
    [1] "cumulative" "data.table" "data.frame" 

我要重新編寫[,這樣,當我把它稱爲我的物體上,它使用的data.table定義的函數,即[.data.table但返回我的用戶定義的類。我該怎麼做呢?

我試圖創建一個函數如下,以及其他一些變化,但我不能讓它工作

'[.cumulative' <- function(x,i,j,...) { 
    y <- NextMethod(.Generic)(x,i.j) 
    class(y) <- .Class 
} 
+1

你目前的嘗試面臨哪些特定問題? – voidHead 2014-09-21 22:27:36

回答

5

This bug已被固定在當前開發版本1.9.3。從NEWS

如果另一個類繼承data.table;例如class(DT) == c("UserClass", "data.table", "data.frame")然後DT[...]現在在結果中保留UserClass。感謝Daniel Krizian的報告#5296(git #64)。測試添加。

require(data.table) ## 1.9.2 
dt = data.table(x=1:5, y=6:10) 
setattr(dt, 'class', c("foo", "data.table", "data.frame")) 
class(dt) 
# [1] "foo"  "data.table" "data.frame" 

## bug... 
class(dt[, .N, by=x]) 
# [1] "data.table" "data.frame" 

# ------------------------------- 

require(data.table) ## 1.9.3 
dt = data.table(x=1:5, y=6:10) 
setattr(dt, 'class', c("foo", "data.table", "data.frame")) 
class(dt) 
# [1] "foo"  "data.table" "data.frame" 

## bug fixed 
class(dt[, .N, by=x]) 
# [1] "foo"  "data.table" "data.frame"