Note that the variation of this that I posted already handles that case. On Sun, Jan 18, 2009 at 5:32 PM, Stavros Macrakis <macra...@alum.mit.edu> wrote: > On Sun, Jan 18, 2009 at 2:22 PM, Wacek Kusnierczyk > <waclaw.marcin.kusnierc...@idi.ntnu.no> wrote: >>> x <- c("abcdef", "defabc", "qwerty") >>> ...[find] all elements where the word 'abc' does not appear (i.e. 3 in this >>> case of 'x'). > >> x[-grep("abc", x)] >> which unfortunately fails if none of the strings in x matches the pattern, >> i.e., grep returns integer(0); > > Yes. > >> arguably, x[integer(0)] should rather return all elements of x > > The meaning of x[V] (for an integer subscript vector V) is: ignore 0 > entries, and then: > > a) if !(all(V>0) | all(V<0) ) => ERROR > b) if all (V>0): length(x[V]) == length(V) > c) if all (V<0): length(x[V]) == length(x)-length(unique(V)) > > When length(V)==0, the preconditions are true for both (b) and (c), so > the R design has made the decision that length(x[V]) == 0 in this > case. If you're going to have the "negative indices means exclusion" > trick, this seems like a reasonable convention. > > Of course, that means that you can't in general use x[-V] (where > all(V>0)) to mean "all elements that are not in V". However, there is > a workaround if you have an upper bound on length(x): > > x[ c(-2^30, -V) ] > > This guarantees at least one negative number. > > -s > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >
______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.