[R] forcing evaluation of a char string argument

William Dunlap wdunlap at tibco.com
Thu Dec 23 03:02:07 CET 2010


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.
> 



More information about the R-help mailing list