Hi, I'm trying to write a method such that my own classes can be used with the groups like "Summary" and "Math", but when I tried to look for examples or just wanted to get an idea of which functions are the members of a group, I found out that the function "getGroupMembers" is not present... I couldn't find an alternative function, if there is one. Does anyone know a solution? Anton
Missing 'getGroupMembers()'
3 messages · Anton Crombach, Brian Ripley, John Chambers
Do you want to write S3 or S4 methods for these groups? Both systems have groups with those names (and they are not the same). In either case, the details are in ?.Methods (in current versions of R).
On Fri, 30 May 2003, Anton Crombach wrote:
I'm trying to write a method such that my own classes can be used with the groups like "Summary" and "Math", but when I tried to look for examples or just wanted to get an idea of which functions are the members of a group, I found out that the function "getGroupMembers" is not present... I couldn't find an alternative function, if there is one. Does anyone know a solution?
Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595
Anton Crombach wrote:
Hi, I'm trying to write a method such that my own classes can be used with the groups like "Summary" and "Math", but when I tried to look for examples or just wanted to get an idea of which functions are the members of a group, I found out that the function "getGroupMembers" is not present... I couldn't find an alternative function, if there is one. Does anyone know a solution?
There isn't one currently, and the implementation is not quite as
straightforward in R.
Generic functions in R are objects, with the group they belong to as a
slot. So, fundamentally, you have to examine some collection of objects
and select those that are generic functions with a particular group
name.
A second complication is that funtions such as "sum" and "+" are not
normally seen as generic functions (so people won't be annoyed by
inefficiency in calling those functions). To find the groups
corresponding to those functions requires a bit of trickery using
knowledge of how R implements methods for them.
So you have to be a little careful that you are looking in the right set
of generic functions before getGroupMembers is well defined.
Having said all that, the following code implements what one is likely
to want in most cases (the argument recursive= to getGroupMembers is not
supported in this version). Subject to comments, we can add a version
of it to the package.
------------------------------
getGroups <- function(what = c(getGenerics(), names(.BasicFunsList))) {
g <-unlist(sapply(what,
function(x){f <- getGeneric(x); if(is(f,
"genericFunction"))f at group else NULL}))
split(names(g), g)
}
getGroupMembers <- function(group, whatGenerics) {
groups <- if(missing(whatGenerics)) getGroups() else
getGroups(whatGenerics)
elNamed(groups, group)
}
------------------------------
With this definition, for example,
R> getGroupMembers("Math")
[1] "cumprod" "sqrt" "abs" "acos" "acosh" "asin"
"asinh"
[8] "atan" "atanh" "ceiling" "cos" "cosh" "cumsum"
"exp"
[15] "floor" "sin" "sinh" "tan" "tanh" "trunc"
Since you mention "Summary", we might as well note now that this group
does not exist in R, because currently the functions that would be its
members are not organized to take methods.
For example,
R> args(max)
function (..., na.rm = FALSE)
NULL
So there is no first argument on which to attach methods. If there is a
strong desire, the formal arguments could be changed, to function(x,
..., na.rm = FALSE). But this needs some discussion (preferrably on
R-devel).
John Chambers
Anton
______________________________________________ R-help at stat.math.ethz.ch mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help
John M. Chambers jmc at bell-labs.com Bell Labs, Lucent Technologies office: (908)582-2681 700 Mountain Avenue, Room 2C-282 fax: (908)582-3340 Murray Hill, NJ 07974 web: http://www.cs.bell-labs.com/~jmc