This is not really OO at all, in my opinion. It's an example of the amazing flexibility of the language.

I'd like to add on to what Erik said, with an example:

 sum(1:10)
[1] 55

 foo <- sum
 foo(1:10)
[1] 55

 junk <- list(a=sum)
 junk$a(1:10)
[1] 55

sum is an R object; it happens to be a function.

When I do
  foo <- sum
I'm creating another R object. It's also a function, so I use it with the same syntax.

When I do
   junk <- list(a=sum)
I'm creating another R object. It's a list, and its first element, named 'a', is a function. Since the element is a function, I use it just like any other function, i.e, follow its name with a pair of parentheses with arguments between them.

Note that in the last example it doesn't matter what the other elements in the list, if any, are. I could just as well do
  junk <- list( foo=data.frame(x=1:4), b=c('x','y'), dd=sum)
Then
  junk$dd(1:10)
  junk$dd( junk$foo$x )
are valid statements. There's no connection between using 'junk' both inside the parentheses and outside. Since junk$dd is a function, you can supply it with any R object, and it doesn't matter where that R object comes from.

I doubt that it's documented in the way you might be expecting. It's a result of the generality of list elements -- they can be any R object.

Hope this helps.
-Don

At 10:48 PM +0100 5/12/10, Ted Harding wrote:
Greetings All,

Out of curiosity, I've just done a very primitive experiment:

  Obj <- list(Fun=sum, Dat=c(1,2,3,4))
  Obj$Fun(Obj$Dat)
  # [1] 10

That sort of thing (much more sophisticated) must be documented
mind-blowingly somewhere. Where?

Where I stand right now: The above (and its immediately obvious
generalisations, like Obj$Fun<-cos) is all I know about it so far.

Ted.

--------------------------------------------------------------------
E-Mail: (Ted Harding) <ted.hard...@manchester.ac.uk>
Fax-to-email: +44 (0)870 094 0861
Date: 12-May-10                                       Time: 22:48:14
------------------------------ XFMail ------------------------------

______________________________________________
R-help@r-project.org mailing list
https://*stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://*www.*R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


--
--------------------------------------
Don MacQueen
Environmental Protection Department
Lawrence Livermore National Laboratory
Livermore, CA, USA
925-423-1062

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to