When I copy a data.table and modify the new one the orginal one gets altered and I cannot figure out one. Is this a normal behaviour?
dt = data.table(zone=1:5, pc=11:15)
dtt = dt
dtt[, pc := pc*2 ]
dtt
zone pc
1: 1 22
2: 2 24
3: 3 26
4: 4 28
5: 5 30
dt
zone pc
1: 1 22
2: 2 24
3: 3 26
4: 4 28
5: 5 30
I have no problem when creating the new data.table more explicitely: dtt = data.table(dt)
When you assign a new variable to an already existing variable, R doesn't create a copy, but just points to the new variable, which is very nice as you don't want to make copies unless you absolutely need to - copy on modify.
After this, since you use the:=
operator, which modifies in-place (by reference), and since at the moment, both objects are pointing to the same location, it gets reflected on both the objects.
The fix is to explicitly copy the data.table
using copy()
function and then assign by reference as follows:
dtt = copy(dt) ## dt and dtt are not pointing to same locations anymore
dtt[, pc := pc*2] ## assignment by reference doesn't affect dt
HTH
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With