hadley wickham wrote: > On Wed, Oct 22, 2008 at 9:34 AM, Duncan Murdoch <[EMAIL PROTECTED]> wrote: > >> On 10/22/2008 10:02 AM, francois Guilhaumon wrote: >> >>> Hello, >>> >>> I'm looking for a way to get the "name" of an object when it is used >>> within an "sapply". >>> >>> More precisely, with a simple example : >>> >>> I have a named list of objects : >>> >>> myList = list(a=rnorm(10),b=rnorm(10),c=rnorm(10)) >>> >>> I would like to create a new object from each of the components of >>> myList using the "sapply" function, for example to get the mean of all >>> components of myList : >>> >>> createVarMean = function(obj){ >>> >>> obj.name = ****** >>> obj.mean = mean(obj) >>> assign(obj.name,obj.mean) >>> >>> }#end of createVarMean >>> >> sapply doesn't pass the names in, but there are other choices: >> >> sapply(seq_along(myList), function(i) list(obj.name=names(myList)[i], >> obj.mean = mean(myList[[i]]))) >> >> which iterates over the indices of myList, rather than over the elements of >> it. But a simple sapply(myList, function(obj) mean(obj)) is probably >> preferable, since it attaches the names in a nice way: >> >> >>> sapply(myList, function(obj) mean(obj)) >>> >> a b c >> -0.4097454 -0.5057526 -0.2204035 >> >> >>> Using : >>> >>> sapply(myList,createVarMean) >>> >>> Should then create all the objects. >>> >>> Any idea to get the names ? Perhaps using object oriented programming >>> (is there an equivalent of the "this" syntax of Java in R ?) ? >>> >> Object oriented stuff in R is quite different from Java, because R doesn't >> have pointers or references except in very special cases. >> > > This would be equally hard to do in Java - it is very very unusual to > create variables on the fly, and you would have to do some > sophisticated reflection stuff. If you're used to using java, maybe > you should think about how you would accomplish this task there - > surely you'd would iterate along an ArrayList, saving the results back > into another ArrayList ? >
I don't really see the point of doing this at all, but if need be, how about l <- lapply(mylist,mean) mapply(assign, paste("foo",names(l),sep="."), l, MoreArgs=list(env=.GlobalEnv)) -- O__ ---- Peter Dalgaard Ă˜ster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - ([EMAIL PROTECTED]) FAX: (+45) 35327907 ______________________________________________ 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.