我有一个data.table,我想分成两个。我这样做如下:split data.table
dt <- data.table(a=c(1,2,3,3),b=c(1,1,2,2))
sdt <- split(dt,dt$b==2)
,但如果我想对这样的事情作为下一步
sdt[[1]][,c:=.N,by=a]
我碰到下面的警告消息。
警告消息:在
[.data.table
(SDT [[1]],...,:=
(C,.N),通过= A): 通过取整个 的副本检测和固定无效.internal.selfref表,这样:=可以通过引用添加这个新列。在 早些时候,这个data.table已被R复制。避免密钥< - , 名称< - 和attr < - 在R目前(和奇怪)可能复制整个 data.table。使用set *语法来避免复制:setkey(), setnames()和setattr()。此外,列表(DT1,DT2)将复制整个DT1 和DT2(R的list()副本命名对象),如果需要(将实施) ,请使用reflist()。如果此消息无效,请 向datatable-help报告,以便修复根本原因。
只是想知道是否有更好的方式来拆分表,以便它更有效(并且不会得到这个消息)?
为什么你要在第一时间分割data.table?分割我们创建一个列表,所以警告处理为什么副本已经发生 – mnel 2013-02-20 10:56:29
我基于时间分割为我的实验创建了两套。 – jamborta 2013-02-20 11:01:09
我很好奇在这种情况下'.N'的含义? – 2013-02-20 11:02:31