Staram się osiągnąć to samo, co dlply z data.table
. Więc po prostu jako bardzo prosty przykład:Równoważne dla dlply w data.table
library(plyr)
library(data.table)
dt <- data.table(p = c("A", "B"), q = 1:2)
dlply(dt, "p", identity)
$A
p q
1 A 1
$B
p q
1 B 2
dt[ , identity(.SD), by = p ]
p q
1: A 1
2: B 2
foo <- function(x) as.list(x)
dt[ , foo(.SD), by = p ]
p q
1: A 1
2: B 2
Oczywiście wartości powrotne foo
są zwinięte do jednego data.table
. I nie chcę używać dlply
, ponieważ przekazuje on podzbiór data.tables
jako data.frames
do foo
, co powoduje, że dalsze operacje w tabelach danych w zakresie foo
są niewydajne.
plyr jest oddzielny pakiet, który służy do konwersji pomiędzy różnymi strukturami danych z łatwość. data.table jest zaimplementowana jako wydajna/rozszerzona data.frame. To jest jego jedyny cel. Więc nie ma na to żadnej skutecznej metody wewnętrznej. To, co już pokazałeś (lapply), jest tym, co można zrobić. – Arun
Dlaczego chcesz podzielić plik data.table? Jest to niezgodne z celem użycia data.table (lepsza wydajność dzięki unikaniu kopii). – Roland
@Roland Całkowicie się zgadzam. Może mój przykład nie był wystarczająco jasny. Co naprawdę chcę zrobić, to wykonywanie w serii podzbiorów data.table pewnych operacji, które konstruują w końcu nowe obiekty 'ReferenceClasses', które chcę zwrócić jako listę. – Beasterfield