Hi,

There's no technical reason. I guess enough people realise now that the set* functions change the object by reference. So if setnames worked on data.frame :

   DF1 = data.frame(a=1:3, b=4:6)
   DF2 = DF1
   setnames(DF2, "b", "B")

This would change both DF1 and DF2. There might be someone who throws up their hands in horror and says this breaks everything they've known about data.frame, too. Isn't it enough that data.table breaks everything already?

We'd have to take a deep breath and calmly explain copy() is needed :

   DF1 = data.frame(a=1:3, b=4:6)
   DF2 = copy(DF1)
   setnames(DF2, "b", "B")

So the reason setnames() hasn't so far been enabled for data.frame is just for safety (using it on a data.frame accidentally) and to avoid complaints and negative Twitterers. On the other hand setnames (different from setNames) is a data.table function so it's not like we're overloading <- or anything.

I suppose setnames() could copy the whole DF2 just like base. But that defeats it's purpose, set* functions work by reference. setnames() is a little different in that it's more convenient and safer than base syntax, too, though; e.g., changing a column name by name. So I can see someone might want to use it for that reason alone and not mind it copies the whole DF when passed a DF.

Matt


On 01/10/13 20:51, Ricardo Saporta wrote:
Hi All,

I'm wondering if there are any potential problems or unforseen pitfalls with having

  setnames(x, nms)

call
   setattr(x, "names", nms)

when x is not a data.table.

Thoughts?

Rick

Ricardo Saporta
Graduate Student, Data Analytics
Rutgers University, New Jersey
e: [email protected] <mailto:[email protected]>



_______________________________________________
datatable-help mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help

_______________________________________________
datatable-help mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help

Reply via email to