2016-04-25 56 views
0

我想創建一個用於data.table的函數。假設我們有如何爲data.table創建函數

library(data.table)  
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9) 

    foo <- function(data, field, grp){ 
     data[, field, by=grp] 
    } 

我已經試過

foo(DT, .N, grp = y) 

foo(DT, y) 

他們返回錯誤。如何在data.table中傳遞輸入參數?

+0

功能已經存在,比如'data.table ::: \' [.data.table \'(DT,j = .N,by = y)'。不過,我懷疑你需要像這樣使用它。使用'foo'而不是'[]'可以獲得什麼? – Frank

+0

@Frank我正在嘗試用相同的'by'調用DT。我想知道是否可以創建功能來幫助它。 – newbie

回答

1

您實質上是要求重新創建函數[.data.table[函數在數據表的上下文中執行對第二個參數j的隱式評估。在通過組中獲取計數的情況下,它只是:

DT[ ,.N, by=y] 
    y N 
1: 1 3 
2: 3 3 
3: 6 3 

假如你想通過組序列也有可能是:

> DT[ ,1:.N, by=y] 
    y V1 
1: 1 1 
2: 1 2 
3: 1 3 
4: 3 1 
5: 3 2 
6: 3 3 
7: 6 1 
8: 6 2 
9: 6 3