[R] be careful: using attach in R functions

Gabor Grothendieck ggrothendieck at myway.com
Tue Feb 24 20:08:18 CET 2004



An alternative to attach is with:

x <- with( theta, c(one,two,three) )

---
Date:   Tue, 24 Feb 2004 23:32:0 +0800 
From:   li dongfeng <ldf at math.pku.edu.cn>
To:   r-help at stat.math.ethz.ch <r-help at stat.math.ethz.ch> 
Subject:   [R] be careful: using attach in R functions 

 
Hi there,

I have just found that the ``attach'' function
can get you into trouble when called many times.
For example, you have a simulation routine called ``f()'',
in which you used ``attach'' and no corresponding ``detach''.
Then you call this function many times. You will find that
the system performance get slower and slower,
because you are making the R search path longer and longer.
So be careful when you use attach in a function!

Below is a demonstration of this performance loss,
you will see a linear growth in CPU time usage.
Adding a ``detach()'' call at the end of ``f''
will get rid of this problem.

###############################
f <- function(){
theta <- list(one=2.0, two=0.3, three=0.4)
attach(theta)
x <- c(one, two, three)
sample(x, 1)
}

test <- function(n=400){
timeu <- numeric(n)
for(i in seq(n)){
timeu[i] <-
system.time({
resi <- f()
})[3]
}
plot(timeu)
}
test()
##############################


¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Li Dongfeng
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ldf-nospacm at math.pku.edu.cn
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2004-02-24




More information about the R-help mailing list