[R] How to move an internal function to external keeping same environment?

Gabor Grothendieck ggrothendieck at gmail.com
Mon Nov 15 17:07:27 CET 2010

On Mon, Nov 15, 2010 at 10:49 AM, Matthieu Stigler
<matthieu.stigler at gmail.com> wrote:
> I have limited understanding of Duncan's points but will follow your advice
> not to do it like this. If I am nervertheless quit keen to use foo2
> externally, is the use of either assign() in foo1, or mget() in foo2 more
> indicated? Or are the same kind of remarks raised against environment() also
> relevant for assign() and mget()?

Another way to approach this, which is safer, is to put it into an OO
framework creating a proto object (package proto) that contains the
shared data and make foo and foo2 its methods.

library(proto) # see http://r-proto.googlecode.com

# create proto object

p <- proto()

# add foo method which stores mydata in receiver object
# and runs foo2

p$foo <- function(.) { .$mydata <- 1:3; .$foo2() }

# add foo2 method which grabs mydata from receiver
# and calculates result

p$foo2 <- function(.) sum(.$mydata)

# run foo method - result is 6


Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com

More information about the R-help mailing list