[R] be careful: using attach in R functions

Liaw, Andy andy_liaw at merck.com
Tue Feb 24 20:13:40 CET 2004


You can write your code more defensively.  There are a few ways to do that:

1. Right after the attach(object), do on.exit(detach(object)).
2. If you know the function will be call repeatedly, it might be a good idea
to check whether the object has been attached.  This way you only need to
attach once.  I can think of a couple of way to do that. The simplest is
probably to check and see if the object name appear in the search list. 

Andy

> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch 
> [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of li dongfeng
> Sent: Monday, February 23, 2004 1:00 PM
> To: 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
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! 
> http://www.R-project.org/posting-guide.html
> 
> 


------------------------------------------------------------------------------
Notice:  This e-mail message, together with any attachments,...{{dropped}}




More information about the R-help mailing list