blue sky
2010-Feb-15 17:07 UTC
[R] Which method is called in command like "class(x)='something'"?
> x=3 > `class<-`(x,'something')#this command prints[1] 3 attr(,"class") [1] "something"> x=3 > class(x)='something'#this command doesn't print anythingThe first of the above two commands print the content of 'x' but the second doesn't, although both of them set the argument 'x'. I'm wondering which is method is called in the latter one.
Barry Rowlingson
2010-Feb-15 17:58 UTC
[R] Which method is called in command like "class(x)='something'"?
On Mon, Feb 15, 2010 at 5:07 PM, blue sky <bluesky315 at gmail.com> wrote:>> x=3 >> `class<-`(x,'something')#this command prints > [1] 3 > attr(,"class") > [1] "something" >> x=3 >> class(x)='something'#this command doesn't print anything > > The first of the above two commands print the content of 'x' but the > second doesn't, although both of them set the argument 'x'. I'm > wondering which is method is called in the latter one. >The same thing is called. It's not a question of the method doing the printing - the printing is done by the R interpreter when it finishes evaluating your line. Normally evaluations (eg sqrt(2)) print out but if you wrap them in 'invisible' they dont - try "invisible(sqrt(2))". All assignments have their invisibility set when run interactively: > x=1:10 > dim(x)=c(2,5) > x see how nothing is printed, either at the 'x=1:10' or the 'dim(x)=...'? Calling the assignment function directly returns a value without the invisibility cloak, which is what you want when typing 'sqrt(2)':> x=1:10 > `dim<-`(x,c(2,5))[,1] [,2] [,3] [,4] [,5] [1,] 1 3 5 7 9 [2,] 2 4 6 8 10 I suspect this behaviour is specified somewhere in the R parser. But be honest, why does it matter? You would quickly get irritated by R telling you what you just did every time you typed an assignment: > x=1:10 [1] 1 2 3 4 5 6 7 8 9 10 Barry -- blog: http://geospaced.blogspot.com/ web: http://www.maths.lancs.ac.uk/~rowlings web: http://www.rowlingson.com/ twitter: http://twitter.com/geospacedman pics: http://www.flickr.com/photos/spacedman