From: Liaw, Andy <andy_liaw_at_merck.com>

Date: Thu 14 Apr 2005 - 08:22:48 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 Thu Apr 14 08:26:32 2005

Date: Thu 14 Apr 2005 - 08:22:48 EST

As Bert said, redefining functions like "[" is surely inadvisable, because
of possibility of breaking codes that depend on the intended behavior. This
is a language _feature_.

If the problem is indexing beyond array extent, just check for it: Are any values that are going to be used for indexing larger than the length of the object? E.g.,

if (any(idx > length(x))) stop("index out of bound") result <- x[i]

If this is still too much work for you, Perhaps R is not for you...

Andy

*> From: Rich FitzJohn
**>
**> Hi,
**>
*

> You could try redefining "[", so that if any element subsetted

*> returned an NA, it would throw an error, e.g.:
**> (Warning: Largely untested! - this will almost certainly cause
**> problems in other classes that use [ to subset. Possibly defining
**> this as "[.default" would be better...)
**>
**> "[" <- function(x, ...) {
**> res <- (base::"[")(x, ...)
**> if ( any(is.na(res)) )
**> stop("An element was NA in a subset")
**> res
**> }
**>
**> > x <- 1:5
**> > x[4]
**> [1] 4
**> > x[7]
**> Error in x[7] : An element was NA in a subset
**>
**> However, you'll probably find this is a little over-zealous, e.g.:
**> > y <- c(1:3, NA, 4)
**> > y[5]
**> [1] 4
**> > y[4]
**> Error in y[4] : An element was NA in a subset
**>
**> If you just want to check for an NA at printing, defining a function
**> like this might be more appropriate:
**> print.or.stop <- function(x) {
**> if ( any(is.na(x)) )
**> stop("An element was NA in a subset")
**> print(x)
**> }
**>
**> You could write a more complicated "[" function that does a bunch of
**> testing, to see if the element extracted is going to be out of the
**> extent of the vector (rather than a "genuine" NA), but since there are
**> a number of ways elements can be extracted from vectors (numeric,
**> logical and character indices can all be used to index vectors, and
**> these have recycling rules, etc), this is probably much more work than
**> a few checks in your code where an NA would actually indicate an
**> error.
**>
**> Cheers,
**> Rich
**>
**> On 4/14/05, Vivek Rao <rvivekrao@yahoo.com> wrote:
**> > I want R to stop running a script (after printing an
**> > error message) when an array subscript larger than the
**> > length of the array is used, for example
**> >
**> > x = c(1)
**> > print(x[2])
**> >
**> > rather than printing NA, since trying to access such
**> > an element may indicate an error in my program. Is
**> > there a way to get this behavior in R? Explicit
**> > testing with the is.na() function everywhere does not
**> > seem like a good solution. Thanks.
**> >
**> > ______________________________________________
**> > 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
**> >
**>
**>
**> --
**> Rich
**> FitzJohn
**> rich.fitzjohn <at> gmail.com |
**> http://homepages.paradise.net.nz/richa183
**>
**> You are in a maze of twisty little functions, all alike
**>
**> ______________________________________________
**> 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
**>
**>
*

>

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 Thu Apr 14 08:26:32 2005

*
This archive was generated by hypermail 2.1.8
: Fri 03 Mar 2006 - 03:31:08 EST
*