One thing that would be super-awesome is a lazy copy-on-write mechanism.  By 
which I mean table2 would initially point to the same memory location as 
table1, but as soon as it's modified, the portions being modified would be 
copied to a new location.

It's pretty rare use case to make a copy of a data structure without intending 
to modify it.  The only instance I can really think of is passing arguments to 
a function, which IIUC is already copy-on-write in R?

Also, I do think Natus' example is a little different from your example on SO.  
In his, a new column is being added, but in yours, an existing column is being 
modified.

Is there a doc reference showing which circumstances make `<-` do a 
copy-by-reference, and which do a deep copy?  For example, if I do `table2 <- 
table1[x>1, list(id)]` , it seems to do a deep copy:

> table1<-data.table(id=c(1,2,3),x=c(1,2,3))
> table2 <- table1[x>1, list(id)]
> table2[, id := 3:4]
> table1
   id x
1:  1 1
2:  2 2
3:  3 3

Sorry if this has already been hashed out a million times, I'm pretty new to 
data.table.

-Ken

From: [email protected] 
[mailto:[email protected]] On Behalf Of 
Christoph Jäckel
Sent: Thursday, October 04, 2012 7:07 AM
To: natus
Cc: [email protected]
Subject: Re: [datatable-help] data.table BUG : data.table assignment

This is actually intended behaviour and I had the problem once as well. Here is 
my question and the solution to it:

http://stackoverflow.com/questions/8030452/pass-by-reference-the-operator-in-the-data-table-package

In a nutshell: Use copy() if you don't want table2 to have y as well.

I hope this helps,

Christoph
On Thu, Oct 4, 2012 at 1:56 PM, natus 
<[email protected]<mailto:[email protected]>> wrote:
Hello,

see this example :

require(data.table)

table1<-data.table(id=c(1,2,3),x=c(1,2,3))
table2<-table1
table1[,y:=sum(x)]
table1
table2

The problem ? Both of table1 and table2 have the variable 'y' BUT only
table1 should.

Thx



--
View this message in context: 
http://r.789695.n4.nabble.com/data-table-BUG-data-table-assignment-tp4644988.html
Sent from the datatable-help mailing list archive at Nabble.com.
_______________________________________________
datatable-help mailing list
[email protected]<mailto:[email protected]>
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help


________________________________
CONFIDENTIALITY NOTICE: This e-mail message is for the sole use of the intended 
recipient(s) and may contain confidential and privileged information. Any 
unauthorized review, use, disclosure or distribution of any kind is strictly 
prohibited. If you are not the intended recipient, please contact the sender 
via reply e-mail and destroy all copies of the original message. Thank you.
_______________________________________________
datatable-help mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help

Reply via email to