Try the following, which I haven't tested much
and needs more error checking (e.g., to see that
the function is not already generic and that
its argument list is compatible with (x,...)).
I put in the print statements to show what
the calls to substitute() do.
toGeneric <- function (funcName) {
stopifnot(is.character(funcName))
funcItself <- get(funcName)
stopifnot(is.function(funcItself))
envir <- environment(funcItself)
tmp <- substitute(funcSymbol <- function(x, ...)
UseMethod(funcName),
list(funcSymbol = as.symbol(funcName), funcName = funcName))
print(tmp)
eval(tmp, envir = envir)
tmp <- substitute(defaultSymbol <- funcItself, list(defaultSymbol
as.symbol(paste(sep = ".",
funcName, "default")), funcItself = funcItself))
print(tmp)
eval(tmp, envir = envir)
}
E.g.,
> wsx <- function(x, base=2)log(x, base=base)
> toGeneric("wsx")
wsx <- function(x, ...) UseMethod("wsx")
wsx.default <- function (x, base = 2)
log(x, base = base)
> wsx
function (x, ...)
UseMethod("wsx")
> wsx.default
function (x, base = 2)
log(x, base = base)
Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
> -----Original Message-----
> From: r-help-bounces at r-project.org
> [mailto:r-help-bounces at r-project.org] On Behalf Of rballen
> Sent: Wednesday, December 22, 2010 2:42 PM
> To: r-help at r-project.org
> Subject: [R] forcing evaluation of a char string argument
>
>
> I'm trying to make a function to turn a regular function into
> an S3 generic
> one. I want myMethod to be:
>
> function(x,...) UseMethod("myMethod")
>
> But I keep getting:
>
> function(x,...) UseMethod(func)
>
> Here's the function:
>
> toGeneric<-function(func) {
> env<-environment(get(func))
>
> # default method of new generic = the original function
>
assign(paste(func,".default",sep=""),get(func),pos=env)
>
> assign(func,function(x,...) UseMethod(func),pos=env)
> }
>
> toGeneric("myMethod")
>
> I messed around with force, substitute, and deparse, but I
> can't get any of
> those to help.
>
> Thanks.
> --
> View this message in context:
> http://r.789695.n4.nabble.com/forcing-evaluation-of-a-char-str
ing-argument-tp3161365p3161365.html> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at 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.
>