Skip to content

documenting yoru progress

8 messages · Tom Sgouros, tom sgouros, Gabor Grothendieck +1 more

#
Hello all:

I have a function that writes a fairly elaborate report based on some
survey data.  For documentation and bookkeeping purposes, I'd like to
write out in the report the function call that produced the report, or
at least enough information to help me recreate the steps that led to
that report.  I've been generating all the reports with scripts, in
order to be able to recreate the steps, but apart from the file name, I
don't yet have a way to match the report to the script that created it.

Can anyone suggest easy ways to do this?  From within a function, is the
function call text available somehow, or the names of the arguments used
in the function invocation?

Many thanks,

 -tom
#
Gabor Grothendieck <ggrothendieck at gmail.com> wrote:

            
Thank you, that is an excellent hack, and I will use it carefully
(though often), but it isn't quite what I had in mind.

In my script called test.R, there is a function called "survey.write",
which writes a report based on some survey results.  It is called
several times at the top level.  I would like the report to say how
"survey.write" was invoked, whether it was invoked as
"survey.write(res.raw,res.q)" or "survey.write(bus.raw,bus.q)".
Obviously I have access to the values of the arguments, but I want the
names of those arguments, or a string containing it all.

Thanks,

 -tom

  
    
#
If what you mean is that you have a file, test.R, of R commands
and you are using source("test.R") and you wish to discover the
name "test.R" without hard coding it in your file, then place this in
test.R:

ofile <- parent.frame(2)$ofile

and ofile will be set to "test.R".  Note that the line shown should not
be within a function or other local environment within the file but
directly at top level.

This is hack which may need to be modified if the internals of the
source command change.
On Dec 2, 2007 6:24 PM, Tom Sgouros <tomfool at as220.org> wrote:
#
Try this:
+    print(match.call())
+    x
+ }
survey.write(x = pi + 3)
On Dec 2, 2007 6:55 PM, tom sgouros <tomfool at as220.org> wrote:
#
Gabor Grothendieck <ggrothendieck at gmail.com> wrote:

            
That's exactly what I need.  Thank you.

But now, another question.  I can't seem to get the value returned by
print() into a character variable.  I tried examining the relevant print
function, to see what it's printing, but there seems not to be a
print.call().  This is not fatal, since I can use print(), but is there
some obvious way to do this?  as.character doesn't do it.

More generally, is there a way to inspect an object of some class I
don't know about to find its members and methods?  I suspect that will
save me some posts like this in the future.

Thanks,

 -tom

  
    
#
Use format:

f <- function(x) {
	format(match.call())
}
f(pi + 3)
On Dec 2, 2007 8:46 PM, tom sgouros <tomfool at as220.org> wrote:
#
On 12/2/2007 6:24 PM, Tom Sgouros wrote:
I think Gabor has answered your question directly, but another approach 
to solve the same underlying problem might be to work with Sweave.   (Or 
ODFweave, etc.)

These allow you to mix R code right into a document that explains the 
reasoning and includes both the input and output of the script.

Duncan Murdoch
#
Duncan Murdoch <murdoch at stats.uwo.ca> wrote:

            
Thank you, that is pretty marvelous.  I will use it next time around.

 -tom