[R] Assigning variables using a loop

Joshua Wiley jwiley.psych at gmail.com
Sat Apr 23 22:53:48 CEST 2011


Hi Nick,

It is typically not a good idea to write functions that automatically
assign variables to the global environment (makes it easy to overwrite
something valuable without knowing you are overwriting it), but if
that is really the best choice for your situation, I would do
something like (inside your function):

# note, if global assignment not needed, just return this
mydata <- list(x = 1, y = 2, z = 3)
lapply(names(mydata), function(x) {
  assign(x, mydata[[x]], pos = .GlobalEnv)
})

HTH,

Josh

On Sat, Apr 23, 2011 at 10:51 AM, Nick Mosely <mosely at uw.edu> wrote:
> Hello R-world,
>
> I have multiple variables that have been generated within a function.
> I would like to assign them each to the Global Environment. I've tried
> the following:
>
> x = 1
> y = 2
> z = 3
> for (i in c(x,y,z)) {
>  assign("i",i,pos=.GlobalEnv)
> }
> i
> [1] 3
>
> Obviously, the problem is that the code is assigning numbers to the
> the new variable i. I tried to get cute using paste:
>
>> x = 1
>> y = 2
>> z = 3
>> for (i in c(x,y,z)) {
> +   assign(paste(i),i,pos=.GlobalEnv)
> + }
>
> But paste enters "1" when i is x, rather than the desired "x". Does
> anyone know of a solution to this problem?
>
> Thanks,
>
> Nick
>
> ______________________________________________
> 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.
>



-- 
Joshua Wiley
Ph.D. Student, Health Psychology
University of California, Los Angeles
http://www.joshuawiley.com/



More information about the R-help mailing list