我有一個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