我很想知道data.tablea相對於環境的行爲是否不一致。使用data.tables時,期望將一個新變量分配給data.table不會複製數據,但會爲現有表創建一個新指針。當源數據表存在於另一個環境中時,這看起來並不正確。例如,
> attach(new.env(), name="dt")
> e <- as.environment("dt")
>
> assign("mydata", data.table(x=1:3, y=1), e)
> mydata
x y
1: 1 1
2: 2 1
3: 3 1
> ls()
[1] "e"
如果我們嘗試並分配一個新的名稱mydata
,我們沒有得到有指向同一數據的預期行爲。
mydata2 <- mydata # also makes a _copy_
mydata2[['y']] <- 5 # change the data
identical(mydata2, mydata)
> FALSE
mydata2
不指向(相同值)作爲mydata
。它做了一個副本。這不是我所期望的data.table。我期望data.tables的行爲更像單數據,其中只有一個數據副本存在,除非明確copy
。
另外,$<-
和[[<-
會導致在全球環境中進行復制。 $<<-
和[[<<-
不(如預期的那樣)。此外,:=
不會導致複製。
這是否與data.table的意圖不一致?
這種行爲是否與data.table不一致?
[R版本信息:
R.version _
平臺x86_64的未知-Linux的GNU
拱x86_64的
OS的Linux-GNU
系統x86_64的,Linux的GNU
狀態
major 3
minor 0.1
年2013
月05
日16
SVN修訂版62743
咒罵r
version.string [R版本3.0.1(2013年5月16日) 綽號很好的運動
對於'data.table','<-'沒有什麼不同。您需要使用data.table提供的':='運算符和'set *'函數來引用。另見http://stackoverflow.com/questions/10225098/understanding-exactly-when-a-data-table-is-a-reference-to-vs-a-copy-of-another和'?「:=」 '。只要你使用':='和'set *',你的期望就是正確的。 –
哦,我現在明白了。感謝您提供有關DT行爲的先前答案的清晰性和鏈接。我會說這種行爲有點不一致/意外,儘管我認識到這是一個你必須處理的限制。大包順便說一句。 – ctbrown