[R] Overwriting a procedure

MacQueen, Don macqueen1 at llnl.gov
Thu Sep 4 02:58:39 CEST 2014


If you have more than one version of fixx(), then the one that is used is
the one that comes first in the search path. The search path is revealed
by the search() function. So if you can learn to control the search path,
then you can control which version of fixx() is used. That would be my
initial approach.

As an aside, you can define your first version of fixx() more simply as

  fixx <- function(x) list(x=x)

and the second more simply as

fixx <- function(x) {
 x[,6]<-x[,5]^2/10
 list(x=x)
}

Using return() is completely unnecessary (but of course ok if preferred as
a matter of programming style).


Of course, this all assumes you truly need two different functions with
the same name. I would think that is unlikely, but since there¹s no
indication of what determines which one should be used, I can¹t say.
However, there must be some criterion that determines that the second
version should be used, so perhaps


fixx <- function(x, criterion) {
  ## criterion must be a logical value of length 1
  if (criterion) x[,6]<-x[,5]^2/10
  list(x=x)
}

would work.


-- 
Don MacQueen

Lawrence Livermore National Laboratory
7000 East Ave., L-627
Livermore, CA 94550
925-423-1062





On 9/2/14, 11:45 AM, "Steven Yen" <syen04 at gmail.com> wrote:

>Is there a way to over-write a procedure (subroutine)?
>
>I include a default procedure fixx in a list of procedures which are
>compiled into a package. By default, the procedure deliver the data
>matrix x.
>
>fixx <- function(x){
>result <- list(x=x)
>return(result)
>}
>
>In some applications, I have transformations (such as squared terms)
>in some column(s) in x. So I include the following procedure in the
>mail (calling) program, hoping to over-write the default procedure
>under the same name in the package (which is the way other languages
>works, e.g., Gauss):
>
>fixx <- function(x){
>x[,6]<-x[,5]^2/10
>result <- list(x=x)
>return(result)
>}
>
>This does not seem to work. The procedure in the main (calling)
>program seems to get ignored. Any idea? Thanks.
>
>______________________________________________
>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