[R] terminate R program when trying to access out-of-bounds array element?
Tony Plate
tplate at acm.org
Thu Apr 14 01:21:29 CEST 2005
One way could be to make a special class with an indexing method that
checks for out-of-bounds numeric indices. Here's an example for vectors:
> setOldClass(c("oobcvec"))
> x <- 1:3
> class(x) <- "oobcvec"
> x
[1] 1 2 3
attr(,"class")
[1] "oobcvec"
> "[.oobcvec" <- function(x, ..., drop=T) {
+ if (!missing(..1) && is.numeric(..1) && any(is.na(..1) | ..1 < 1 |
..1 > length(x)))
+ stop("numeric vector out of range")
+ NextMethod("[")
+ }
> x[2:3]
[1] 2 3
> x[2:4]
Error in "[.oobcvec"(x, 2:4) : numeric vector out of range
>
Then, for vectors for which you want out-of-bounds checks done when they
indexed, set the class to "oobcvec". This should work for simple
vectors (I checked, and it works if the vectors have names).
If you want this write a method like this for indexing matrices, you can
use ..1 and ..2 to refer to the i and j indices. If you want to also be
able to check for missing character indices, you'll just need to add
more code. Note that the above example disallows 0 and negative
indices, which may or may not be what you want.
If you're extensively using other classes that you've defined, and you
want out-of-bounds checking for them, then you need to integrate the
checks into the subsetting methods for those classes -- you can't just
use the above approach.
hope this helps,
Tony Plate
Vivek Rao 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 at 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
>
More information about the R-help
mailing list