[R] stopifnot with logical(0)
Duncan Murdoch
murdoch.duncan at gmail.com
Mon Dec 14 18:40:58 CET 2015
On 14/12/2015 11:45 AM, Hadley Wickham wrote:
> >> I wonder if R is missing an equality operator for this case. Currently:
> >>
> >> * == is suboptimal because it's vectorised
> >> * all.equal is suboptimal because it returns TRUE or a text string
> >> * identical is suboptimal because it doesn't do common coercions
> >>
> >> Do we need another function (equals()?) that uses the same coercion
> >> rules as == but isn't vectorised? (Like == it would only work with
> >> vectors, so you'd still need identical() for (e.g.) comparing
> >> environments)
> >
> > I don't think so. We already have all(), so all(x == y) would do what you
> > want.
>
> But that recycles, which is what we're trying to avoid here.
I think this is too special a case to need a function. Usually all(x ==
y) is the test you want, because so many R functions will recycle. It's
not so when x is the dim of an array. So I could see a weak argument
for an equalDim() function, but I think it's better just to use
stopifnot(length(dim) == 2, all(dim == c(3,4)))
I know the all() in the second arg isn't needed, but I think it makes
the intention clearer. I think there would be less confusion if
stopifnot() required its args to be single logical values, so I usually
try to use it that way.
Duncan Murdoch
More information about the R-help
mailing list