[R] getting/storing the name of an object passed to a function

Gavin Simpson gavin.simpson at ucl.ac.uk
Wed Feb 19 16:49:03 CET 2003


Hi,

As usual Prof. Ripley has delved a little deeper into the question and
pointed out that whilst my functions might be doing/printing what I wanted
them to do, they might not do if the object was updated AFTER using
hotelling.t!  See Prof. Ripley's reply below.

This was something I wasn't even close to considering, so thank you for
pointing this out.  I'll opt for the safe option and pass the bits I
actually require between functions rather than just the name.

All the best,

Gavin

-----Original Message-----
From: ripley at stats.ox.ac.uk [mailto:ripley at stats.ox.ac.uk] 
Sent: 19 February 2003 15:33
To: Gavin Simpson
Cc: 'r-help'
Subject: RE: [R] getting/storing the name of an object passed to a function


Here's a comment I wrote that has not come through yet (and there is an 
engineer working on my mail server so it may be delayed/lost):

Use  objname <- deparse(substitute(obj))

at the top of hotelling.t, and make objname part of the returned list.

Another way is to capture the call by

        Call <- match.call()

pass that on and look at it in the print function.

However, if you really want the object and not its name, it is better to
pass the object.  Otherwise I could do

fit.lda <- lda(...)
hT <- hotelling.t(fit.lda)
fit.lda <- update(fit.lda, ....)
hT

and that would I suspect not be what you want.


More generally, get() is dangerous, and I am pretty sure you don't want to
start the get() search inside your function nor do you want to eval()
there.  There is a real danger of getting the wrong objects.



On Wed, 19 Feb 2003, Gavin Simpson wrote:

> Dear List,
> 
> Thanks to Patrick Burns I have now have the answer to my problem.
> 
> getting the name and storing it in a variable is done by:
> 
> obj.nam <- deparse(substitute(obj))
> 
> getting the object back out using its name is done by:
> 
> get(obj.nam)
> 
> To actually use the entity that is described by obj.nam I then wrapped
get()
> in eval().  The final line of code now looks like this:
> 
> print(table(predict(get(x$obj.nam))$class, eval(get(x$obj.nam)$call[[3]]),
> dnn=c("Actual", "Predicted")))
> 
> Which does exactly what I wanted it to.
> 
> Many thanks
> 
> Gavin Simpson
> 
> -----Original Message-----
> From: r-help-admin at stat.math.ethz.ch
[mailto:r-help-admin at stat.math.ethz.ch]
> On Behalf Of Gavin Simpson
> Sent: 19 February 2003 14:14
> To: 'r-help'
> Subject: [R] getting/storing the name of an object passed to a function
> 
> 
> Hi
> 
> I have a couple of functions that work on the object created by another R
> command and then print out or summarise the results of this work.
> 
> The main function is defined as:
> 
> hotelling.t <- function(obj)
> {
> 	#internal commands
> }
> 
> I then have print.hotelling.t() that takes the list returned by
hotelling.t
> and prints it with some extra significance calculations, formatting, etc.
> 
> I want to then use the named object in another calculation in
> print.hotelling.t() , that only gets done/printed if you ask for it in the
> call to print.hotelling.t()
> 
> How do I store the name of the object obj passed to hotelling.t in the
> object returned by hotelling.t?
> 
> And how do I "paste" the name of that object into a call to another R
> function within my print.hotelling.t()?
> 
> Perhaps this is not the best way to do things in R?  So any comments would
> be most appreciated.
> 
> By the way, the object obj is of class lda (Package MASS), if that
matters.
> Functions appended below.  R 1.6.2 on windows XP.
> 
> Many Thanks
> 
> Gavin Simpson
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> http://www.stat.math.ethz.ch/mailman/listinfo/r-help
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> http://www.stat.math.ethz.ch/mailman/listinfo/r-help
> 

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list