2012-09-01 74 views
1

我試圖通過參考分配一個列我一個子集和data.table返回值分配給另一個data.table像這樣(例如玩具)後:拷貝()在data.table,R

> x <- data.table(a=1:10, b=11:20, c=21:30) 
> x 
    a b c 
1: 1 11 21 
2: 2 12 22 
3: 3 13 23 
4: 4 14 24 
5: 5 15 25 
6: 6 16 26 
7: 7 17 27 
8: 8 18 28 
9: 9 19 29 
10: 10 20 30 
> y <- x[a==1 | a == 2, list(a,b,c)] 
> y[,d:=a+b] 
Error in `[.data.table`(y, , `:=`(d, a + b)) : 
    It appears that at some earlier point, names of this data.table have been reassigned.  Please ensure to use setnames() rather than names<- or colnames<-. Otherwise, please report  to datatable-help. 

我不我完全理解這個問題:返回的y僅僅是一個「查看」到x相同的內存,因此應該在參考設置一個列之前設置爲copyx

感謝

+3

你可以構造一個可重複的例子,並把它添加到你的問題? –

+1

除了一個可重複的例子,請更新到data.table(1.8.2)的最新版本,以便我們都可以在同一頁面上獲得幫助。 –

+0

剛剛更新了一個例子的問題。這是data.table版本1.8.1。不幸的是,我不能升級,但想象一下在1.8.2版本中也會出現這種情況。如果沒有,我會很高興作爲答案。 – Alex

回答

3

無法重現與data.table 1.8.2錯誤中的R 2.15.1:

> x <- data.table(a=1:10, b=11:20, c=21:30); x 
    a b c 
1: 1 11 21 
2: 2 12 22 
3: 3 13 23 
4: 4 14 24 
5: 5 15 25 
6: 6 16 26 
7: 7 17 27 
8: 8 18 28 
9: 9 19 29 
10: 10 20 30 
> 
> y <- x[x$a==1 | x$a == 2, list(a,b,c)] 
> 
> y 
    a b c 
1: 1 11 21 
2: 2 12 22 

> y[,d:=a+b] 
    a b c d 
1: 1 11 21 12 
2: 2 12 22 14