为什么空逻辑向量通过stopifnot()检查?

Today I found that some of my stopifnot() tests are failing because the passed arguments evaluate to empty logical vectors.

这是一个例子:

stopifnot(iris$nosuchcolumn == 2)  # passes without error

这是非常不直观的,似乎与其他一些行为相矛盾。考虑:

isTRUE(logical())
> FALSE

stopifnot(logical())
# passes

So stopifnot() passes even when this argument is not TRUE.
But furthermore, the behaviour of the above is different with different types of empty vectors.

isTRUE(numeric())
> FALSE

stopifnot(numeric())
# Error: numeric() are not all TRUE

上面是否有逻辑,还是应该将其视为错误?