[Rd] Unfixed bugs in latest R-patched
Radford Neal
radford at cs.toronto.edu
Tue Jun 24 22:40:30 CEST 2014
> > o Fixed the following bug (also present in R-2.15.0 and R-3.0.2):
>
> > x <- t(5)
> > print (x %*% c(3,4))
> > print (crossprod(5,c(3,4)))
>
> > The call of crossprod produced an error, whereas the
> > corresponding use of %*% does not.
>
> > o Fixed the following bug (also present in R-2.15.0 and R-3.0.2):
>
> > v <- c(1,2)
> > m <- matrix(c(3,4),1,2)
> > print(t(m)%*%v)
> > print(crossprod(m,v))
>
> > in which crossprod gave an error rather than produce the answer
> > for the corresponding use of %*%.
> As S and R's terminology has always been mathematically correct and
> "knows" that a vector is not a 1-row matrix or 1-column matrix
> (which some people call row-vector and column-vector), R has
> indeed much more freedom to be lenient in how to promote vectors
> to matrices, and it has always done so tolerantly for some cases
> of "%*%", but even there is room for discussion, see below.
> However, one can argue that the current behavior is quite
> consistent {there is more than one kind of consistency here; in
> this case it's the consistency of underlying C code IIRC}, and
> not strictly a bug.
If you look at help(crossprod), you'll see that it says that
crossprod(x,y) is equivalent to t(x) %*% y. But it's not, since
the latter works in some cases where the former gives an error.
So it's a bug.
Furthermore, crossprod(x,y) ought to be equivalent to t(x) %*% y,
even in cases where a vector needs to get promoted to a matrix,
because such cases can arise from inadvertant dropping of dimensions
when subscriptiong a matrix (eg, with 1:n, with n happening to be 1).
Sometimes, this problem gets fixed by the transpose.
Radford Neal
More information about the R-devel
mailing list