An idiom like this would also work. f <- function(a,b) list( data.frame(a+rnorm(20), b), loess( a ~ b) ) lapply(seq_along(out <- f(1:20, 1:20)), function(i) assign(c("c", "d")[i], out[[i]], envir = .GlobalEnv))
It is not elegant if you are doing this regularly, but, I think, functions typically return lists of output rather than assigning to the global environment because presumably one function returns related objects so it makes sense for them to stay grouped in a list. If the two steps really are unrelated, then use two functions. It seems like what you want is to have a function return each object not in a list but to the global environment, but you would like to be able to give them your own names (which makes sense). If this is with your own functions, you could adapt them easily to accept names and then assign to global. f <- function(a,b, names = c("a", "b")) { assign(names[1], data.frame(a + rnorm(20), b), envir = .GlobalEnv) assign(names[2], loess(a ~ b), envir = .GlobalEnv) } f(1:20, 1:20, c("c", "d")) I'm not arguing against Gabor's list function, just tossing out a few other ideas. I am not familiar with perl, but in R I am used to the thing on the left being what is assigned to; the list[a, b] assigning to global is counterintuitive to me personally. Given that this works: .GlobalEnv[["a"]] <- 1 a I was hoping that: .GlobalEnv[c("c", "d")] <- f(1:20, 1:20) would also, but alas environments are not subsettable. Interesting question. Cheers, Josh On Fri, Mar 30, 2012 at 6:26 PM, ivo welch <ivo.we...@gmail.com> wrote: > thanks, everyone. I should have been clearer (as always). I used the > numbers as an example only. I am aware that I can put numbers into > vectors and get nice R syntax. my problem is that I usually want to > return multiple and/or mixed objects, such as multiple data frames. I > should have given as an example something like > > f <- function(a,b) list( data.frame(a+rnorm(20), b), loess( a ~ b) ) > > weidong---yes, nice syntax, but I don't want to invoke f() twice. > > peter---I don't think your unlist syntax works. I tried it. > > gabor---#1-#3 work, but aren't what I really want. #4 is exactly what > I wanted. can list[] be added into the standard core R as a feature? > it would seem like a natural part of the syntax for functions > returning multiple values. > > justin---mea culpa. > > regards, > > /iaw > ---- > Ivo Welch (ivo.we...@gmail.com) > > > > On Fri, Mar 30, 2012 at 5:08 PM, Justin Haynes <jto...@gmail.com> wrote: >> You can also take a look at >> >> http://stackoverflow.com/questions/7519790/assign-multiple-new-variables-in-a-single-line-in-r >> >> which has some additional solutions. >> >> >> >> On Fri, Mar 30, 2012 at 4:49 PM, Peter Ehlers <ehl...@ucalgary.ca> wrote: >>> On 2012-03-30 15:40, ivo welch wrote: >>>> >>>> Dear R wizards: is there a clean way to assign to elements in a list? >>>> what I would like to do, in pseudo R+perl notation is >>>> >>>> f<- function(a,b) list(a+b,a-b) >>>> (c,d)<- f(1,2) >>>> >>>> and have c be assigned 1+2 and d be assigned 1-2. right now, I use the >>>> clunky >>>> >>>> x<- f(1,2 >>>> c<- x[[1]] >>>> d<- x[[2]] >>>> rm(x) >>>> >>>> which seems awful. is there a nicer syntax? >>>> >>>> regards, /iaw >>>> ---- >>>> Ivo Welch (ivo.we...@brown.edu, ivo.we...@gmail.com) >>>> >>> >>> I must be missing something. Why not just assign to a >>> vector instead of a list? >>> >>> f<- function(a,b) c(a+b,a-b) >>> >>> If it's imperative that f return a list, then you >>> could use >>> >>> (c, d) <- unlist(f(a, b)) >>> >>> to get vector (c, d). >>> >>> Peter Ehlers >>> >>> >>> ______________________________________________ >>> R-help@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. > > ______________________________________________ > R-help@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 Programmer Analyst II, Statistical Consulting Group University of California, Los Angeles https://joshuawiley.com/ ______________________________________________ R-help@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.