2016-04-25 2 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', а не' [] 's? – Frank

+0

@Frank Я пытаюсь вызвать DT с тем же 'by'. Мне интересно, можем ли мы создать функцию, чтобы помочь ей. – 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