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: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] 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: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] > 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 > > ______________________________________________ > [EMAIL PROTECTED] mailing list > http://www.stat.math.ethz.ch/mailman/listinfo/r-help > > ______________________________________________ > [EMAIL PROTECTED] mailing list > http://www.stat.math.ethz.ch/mailman/listinfo/r-help > -- Brian D. Ripley, [EMAIL PROTECTED] 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 ______________________________________________ [EMAIL PROTECTED] mailing list http://www.stat.math.ethz.ch/mailman/listinfo/r-help
