Re: [R] getting the name of an object

2008-10-22 Thread Duncan Murdoch

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.


Duncan Murdoch



I don't want to use a loop here.

thank you for your time and trouble,

François.

__
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.


Re: [R] getting the name of an object

2008-10-22 Thread hadley wickham
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 ?

Hadley


-- 
http://had.co.nz/

__
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.


Re: [R] getting the name of an object

2008-10-22 Thread Peter Dalgaard
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.