我試圖達到與data.table
一樣的效果。因此,正如一個很簡單的例子:等同於data.table中的dlply
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
明顯的foo
返回值被壓縮成一個data.table
。我不想使用dlply
,因爲它通過了分號data.tables
作爲data.frames
到foo
,這使foo
內的其他data.table操作效率低下。
plyr是一個單獨的軟件包,是爲不同的數據結構之間的轉換緩解。 data.table被實現爲高效/增強的數據框架。這是它的唯一目的。所以沒有內部有效的方法來做到這一點。你已經展示過的東西(lapply)是你能做的。 – Arun
你爲什麼要分割一個data.table?這違背了使用data.table的全部目的(通過避免拷貝來提高效率)。 – Roland
@Roland我完全同意。也許我的例子不夠清楚。我真正想要做的是在一系列data.table子集上執行一些操作,這些操作在最後構造了一個新的'ReferenceClasses'對象,我想返回列表。 – Beasterfield