[R] attaching data.frame/list within a function

Liaw, Andy andy_liaw at merck.com
Wed Apr 14 20:50:19 CEST 2004


What you are asking for doesn't even work at the R prompt, let alone inside
a function.  The _really_ ugly kludge I manage to come up with is to
manually assign the components of the list (or variables in the data frame)
into the function's environment:

f <- function(mylist=list(a=1:5)) {
    nm <- names(mylist)
    for (i in seq(along=nm)) {
        assign(nm[i], mget(nm[i], envir=NULL, ifnotfound=mylist[i]))
    }
    sapply(names(mylist), function(x) print(get(x)))
    ls()
}

Here are a couple of tests:

> f()
$a
[1] 1 2 3 4 5

[1] "a"      "i"      "mylist" "nm"    
> f(list(b=5:1, z="ha!"))
$b
[1] 5 4 3 2 1

$z
[1] "ha!"

[1] "b"      "i"      "mylist" "nm"     "z"     

Andy

> From: Gardar Johannesson
> 
> I'm trying to find a good way of attaching a list within a 
> function such 
> that the attached variables (the list's members) precede the global 
> environment (.GlobalEnv) in the search list.  Here is a 
> non-working example 
> using attach(), which hopefully explains better what I'm trying to do:
> 
>  > foo <- function(x=0, input=list(a=10)) {
> +   attach(input)
> +   on.exit(detach(input))
> +   print(search())
> +   print(a)
> + }
>  >
>  > a
> Error: Object "a" not found
>  > foo()  ## this prints out a = 10
> [1] ".GlobalEnv"       "input"            "package:methods"  
> "package:stats"
> [5] "package:graphics" "package:utils"    "Autoloads"        
> "package:base"
> [1] 10
>  >
>  > a <- 0
>  > foo()  ## this prints out a = 0, not a = 10
> [1] ".GlobalEnv"       "input"            "package:methods"  
> "package:stats"
> [5] "package:graphics" "package:utils"    "Autoloads"        
> "package:base"
> [1] 0
>  >
> 
> 
> Thanks,
> 
>                  Gardar
> 
> 
> ___________________________________________________________________
> Gardar Johannesson
> Lawrence Livermore National Laboratory
> 7000 East Avenue, L-229
> Livermore, CA 94550
> 
> johannesson1 at llnl.gov
> Tel: (925) 422-3901,  Fax: (925) 422-4141
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> 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
> 
>




More information about the R-help mailing list