<html><head></head><body>In a debugging session, I found that setnames changed the names of an identical data.table although having a different name><br><br><font size="2">> ############### using setnames()<br>> require(data.table)<br>> mytab = data.table(a = letters[1:4], b = 1:4 )<br>> str(mytab)<br>Classes ‘data.table’ and 'data.frame': 4 obs. of 2 variables:<br> $ a: chr "a" "b" "c" "d"<br> $ b: int 1 2 3 4<br> - attr(*, ".internal.selfref")=<externalptr> <br>> mytab<br> a b<br>1: a 1<br>2: b 2<br>3: c 3<br>4: d 4<br>> <br>> othertab = mytab<br>> othertab<br> a b<br>1: a 1<br>2: b 2<br>3: c 3<br>4: d 4<br>> setnames(othertab, c("a", "b"), c("aa","bb"))<br>> othertab<br> aa bb<br>1: a 1<br>2: b 2<br>3: c 3<br>4: d 4<br>> mytab ## names have unexpectedly changed too<br> aa bb<br>1: a 1<br>2: b 2<br>3: c 3<br>4: d 4<br>> <br>> ############### using names()<br>> mytab = data.table(a = letters[1:4], b = 1:4 )<br>> str(mytab)<br>Classes ‘data.table’ and 'data.frame': 4 obs. of 2 variables:<br> $ a: chr "a" "b" "c" "d"<br> $ b: int 1 2 3 4<br> - attr(*, ".internal.selfref")=<externalptr> <br>> mytab<br> a b<br>1: a 1<br>2: b 2<br>3: c 3<br>4: d 4<br>> <br>> othertab = mytab<br>> othertab<br> a b<br>1: a 1<br>2: b 2<br>3: c 3<br>4: d 4<br>> names(othertab) = c("aa","bb")<br>Warning message:<br>In `names<-.data.table`(`*tmp*`, value = c("aa", "bb")) :<br> 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.<br>> othertab<br> aa bb<br>1: a 1<br>2: b 2<br>3: c 3<br>4: d 4<br>> mytab ## names unchanged as expected<br> a b<br>1: a 1<br>2: b 2<br>3: c 3<br>4: d 4<br>> <br>> sessionInfo()<br>R version 3.0.1 (2013-05-16)<br>Platform: x86_64-w64-mingw32/x64 (64-bit)<br><br>locale:<br>[1] LC_COLLATE=German_Germany.1252 LC_CTYPE=German_Germany.1252 LC_MONETARY=German_Germany.1252 LC_NUMERIC=C LC_TIME=German_Germany.1252 <br><br>attached base packages:<br>[1] stats graphics grDevices utils datasets methods base <br><br>other attached packages:<br>[1] data.table_1.8.10<br><br>loaded via a namespace (and not attached):<br>[1] tools_3.0.1</font><br></body></html>