DIM() is to dim() as NROW() is to nrow(). That is, it is identical to
dim() in most cases except if the input is a bare atomic vector with no
dim attribute, in which case, the length of the vector is returned instead
of NULL.
DROP first calls base::drop  and then completely removes the dim
attribute if the result is a 1-d array