On 11-01-13 3:09 AM, Taras Zakharko wrote:
Dear R gurus, I am trying to create a nicer API interface for some R modules I have written. Here, I heavily rely on S3 method dispatch mechanics and makeActiveBinding() function I have discovered that I apparently can't dispatch on function call operator (). While .Primitive("(") exists, which leads me to believe that things like x(...) are internally translated to .Primitive("(")(x, ...), I can't seem to do something like:
The "(" function is not a function call operator. It's essentially a no-op. I believe its only purpose is to help in deparsing, so that things like (x + y) would deparse in the same way as entered.
x<- integer() class(x)<- "testclass" "(.testclass"<- function(o, x, y) print(paste(x, y)) x(1, 2) Similar code does work for other operators like "[". A workaround I have discovered is to make x a function from the beginning and then extend the functionality by via S3 methods. Unfortunately, it does not allow me to do something I'd really like to - use syntax like this: x(...)<- y
You can use this syntax by defining a function `x<-` <- function(...) {} and it could be an S3 method, but it is a completely separate object from x. Duncan Murdoch
For this, I'd need to dispatch on something like "(<-.testclass"<- function(x, arglist, value) Currently, I am using the index operator for this (i.e. x[...]<- y) - it works nicely, but I'd prefer the () syntax, if possible. Does anyone know a way to do this?
______________________________________________ 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.