[datatable-help] setnames changes names of other data.table
Holger Kirsten
hkirsten at imise.uni-leipzig.de
Sat Jan 11 15:18:48 CET 2014
In a debugging session, I found that setnames changed the names of an identical data.table although having a different name>
> ############### using setnames()
> require(data.table)
> mytab = data.table(a = letters[1:4], b = 1:4 )
> str(mytab)
Classes ‘data.table’ and 'data.frame': 4 obs. of 2 variables:
$ a: chr "a" "b" "c" "d"
$ b: int 1 2 3 4
- attr(*, ".internal.selfref")=<externalptr>
> mytab
a b
1: a 1
2: b 2
3: c 3
4: d 4
>
> othertab = mytab
> othertab
a b
1: a 1
2: b 2
3: c 3
4: d 4
> setnames(othertab, c("a", "b"), c("aa","bb"))
> othertab
aa bb
1: a 1
2: b 2
3: c 3
4: d 4
> mytab ## names have unexpectedly changed too
aa bb
1: a 1
2: b 2
3: c 3
4: d 4
>
> ############### using names()
> mytab = data.table(a = letters[1:4], b = 1:4 )
> str(mytab)
Classes ‘data.table’ and 'data.frame': 4 obs. of 2 variables:
$ a: chr "a" "b" "c" "d"
$ b: int 1 2 3 4
- attr(*, ".internal.selfref")=<externalptr>
> mytab
a b
1: a 1
2: b 2
3: c 3
4: d 4
>
> othertab = mytab
> othertab
a b
1: a 1
2: b 2
3: c 3
4: d 4
> names(othertab) = c("aa","bb")
Warning message:
In `names<-.data.table`(`*tmp*`, value = c("aa", "bb")) :
The names(x)<-value syntax copies the whole table. This is due to <- in R itself. Please change to setnames(x,old,new) which does not copy and is faster. See help('setnames'). You can safely ignore this warning if it is inconvenient to change right now. Setting options(warn=2) turns this warning into an error, so you can then use traceback() to find and change your names<- calls.
> othertab
aa bb
1: a 1
2: b 2
3: c 3
4: d 4
> mytab ## names unchanged as expected
a b
1: a 1
2: b 2
3: c 3
4: d 4
>
> sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=German_Germany.1252 LC_CTYPE=German_Germany.1252 LC_MONETARY=German_Germany.1252 LC_NUMERIC=C LC_TIME=German_Germany.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] data.table_1.8.10
loaded via a namespace (and not attached):
[1] tools_3.0.1
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/datatable-help/attachments/20140111/ea9c8136/attachment.html>
More information about the datatable-help
mailing list