From: ivo welch <ivowel_at_gmail.com>

Date: Mon 06 Feb 2006 - 08:28:50 EST

R-help@stat.math.ethz.ch mailing list

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Mon Feb 06 08:38:00 2006

Date: Mon 06 Feb 2006 - 08:28:50 EST

- Is there a way that I can print an R functional backtrace? Instead of passing my subroutine name to my function "assert()" below, it would be nice if I could just print the whole call tree [preferably with file names+line numbers] when I want my program to gracefully bonk out. (PS: I think that this is also what R should print when any user program bonks out, not just the stop message.) Actually, I just learned about traceback(), which functions nicely AFTER the program stops, not before. But it gives no traceback earlier---and it does not give filename+lineno.
- is there a way to print all my user defined functions? I have an init file, in which I am defining all sorts of useful utility functions, and I would like to print what I have defined (for memory) upon a read of this init file? that is, something that has functionality like note.all.local.definitions.now.in.vector( all.local.functions ) a <- function() { } b <- function() { } cat( all.local.functions ); # should print 'a' and 'b'.
- is there a string variable that gives me the name of the current function I am in?
- SUGGESTION: can we please offer the "?:" operator ala C in addition to ifelse()? This would make R code prettier. Similarly, perl has a nice construct, which would be lovely, but which may not jive with the R syntax: condition or die("the condition", condition, "has failed"); condition and cat("my condition", condition, "is met"); I believe "or" and "and" are not defined, so this may be possible...
- has it now become possible to embed sample data sets in R code? (I asked this a while back, but there were nly kludges, no standard "pretty" solutions.)
- SUGGESTION: The ?"function" docs would be terrific if they had a small example at the end that showed how to return multiple arguments, and then pick them up. I believe this is best done through lists, but I am not sure.

################################################################ #### native.slope computes a suitable srt from a function around #### a point on a function. This is useful until text() gets #### an srt parameter that is relative to the coordinate system.#### (Ideally, R would be able to slope along a function.)

################################################################

native.slope <- function( x, y, where.i, debug =0) {

assert <- function( condition, routine, ... ) {
if (condition) return(NULL);

cat(paste(routine,...));

stop("THIS IS A FATAL ERROR!\n");

}

subname= "native.slope"; # until I discover how to print a complete backtrace, this is it.

assert( length(x) == length(y), subname,

"Sorry, but x and y must have equal dimensions, not ", length(x), " and ", length(y), "\n");

## try to take a symmetric field around the point to be described l0= ifelse( where.i<=1, 1, where.i-1); l1= ifelse( where.i>=length(y), length(y), where.i+1);

assert( !is.na(x[l0]), subname, "Sorry, but x[",l0,"] is NaN"); assert( !is.na(x[l1]), subname, "Sorry, but x[",l1,"] is NaN"); assert( !is.na(y[l0]), subname, "Sorry, but y[",l0,"] is NaN"); assert( !is.na(y[l0]), subname, "Sorry, but y[",l1,"] is NaN");

assert( y[l1] != y[l0], subname, "Sorry, but you cannot draw a slope on a point");

## native slope in a 1:1 coordinate system
d= ( (y[l0]-y[l1])/(x[l0]-x[l1]) );

if (is.na(d)) return(0); # we do not know how to handle an undefined
spot at a function!

## now adjust by the axis scale and size of plot area
.usr <- par('usr') # dimensions of user units
.plt <- par('plt') # percent of figure area that plot region is
d.m <- (.usr[4] - .usr[3]) / (.usr[2] - .usr[1]) * (.plt[2] -
.plt[1]) / (.plt[4] - .plt[3])

assert( !is.na(d.m), subname, "Internal Error: I do not have
sensible axis dimensions (", d.m, ")\n");

## now handle the drawing system

.fin = par('fin');

asp.ratio = .fin[1]/.fin[2];

assert( !is.na(asp.ratio), subname, "Internal Error: I do not have a
reasonable drawing aspect ratio");

net.slope= d/asp.ratio/d.m;

slope = atan(net.slope)/pi*180.0;

if (debug) {

cat("\t", subname, "debug: d=", d, " (",y[where.i-1],y[where.i+1],
x[where.i-1], x[where.i+1],")\n",

"\t\td.m=",d.m, " (", .usr, ",", .plt, ")\n", "\t\tasp.ratio=", .fin, "\n\t\t==> slope=", net.slope, "=", slope, "deg\n");points( x[where.i], y[where.i], pch=19 ); }

return( slope = slope );

}

R-help@stat.math.ethz.ch mailing list

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Mon Feb 06 08:38:00 2006

*
This archive was generated by hypermail 2.1.8
: Fri 03 Mar 2006 - 03:42:24 EST
*