[R] Problems with crossprod
Liaw, Andy
andy_liaw at merck.com
Fri Oct 17 14:59:18 CEST 2003
Somehow R creates `a' as a matrix with 0 rows and 5 columns. I don't know
how crossprod() or other linear algebra functions deals with such a
degenerate matrix.
I'd suggest R Core to add checks for strictly positive dimensions in such
functions.
(Also, I find it strange that A[1,] is a vector, but A[numeric(0),] is a 0x5
matrix...)
Andy
> From: Giovanni Marchetti [mailto:gmm at ds.unifi.it]
>
> Dear R-users,
>
> I found a strange problem
> working with products of two matrices, say:
>
> a <- A[i, ] ; crossprod(a)
>
> where i is a set of integers selecting rows. When i is empty
> the result is in a sense random.
>
> After some trials the right answer
> (a matrix of zeros) appears.
>
> --------------- Illustration --------------------
> R : Copyright 2003, The R Development Core Team
> Version 1.8.0 (2003-10-08)
>
> > A <-matrix(0, 5, 5)
> > i <- c()
> > a <- A[i, ] ; crossprod(a)
> [,1] [,2] [,3] [,4] [,5]
> [1,] 6.578187e-313 NaN NaN NaN NaN
> [2,] NaN 1.273197e-313 NaN 1.485397e-313 NaN
> [3,] NaN 4.243992e-313 2.121996e-314 NaN NaN
> [4,] NaN 1.697597e-313 NaN 4.880590e-313 NaN
> [5,] 5.941588e-313 NaN NaN 1.697597e-313 NaN
> > a <- A[i, ] ; crossprod(a)
> [,1] [,2] [,3] [,4]
> [,5]
> [1,] 2.121996e-314 5.729389e-313 NaN NaN
> NaN
> [2,] NaN NaN NaN NaN
> 1.909796e-313
> [3,] 2.970794e-313 NaN NaN NaN
> NaN
> [4,] NaN NaN NaN 8.487983e-314
> NaN
> [5,] NaN 6.365987e-313 2.546395e-313 NaN
> NaN
> > a <- A[i, ] ; crossprod(a)
> [,1] [,2] [,3] [,4] [,5]
> [1,] NaN 1.485397e-313 NaN NaN 2.970794e-313
> [2,] 3.182994e-313 NaN NaN 1.060998e-313 NaN
> [3,] NaN NaN NaN 1.697597e-313 2.737375e-312
> [4,] NaN NaN NaN NaN 2.048394e+10
> [5,] NaN NaN NaN NaN 2.970794e-313
> > a <- A[i, ] ; crossprod(a)
> [,1] [,2] [,3] [,4] [,5]
> [1,] 1.591383e-266 20489834629 0 0 0
> [2,] 5.031994e-266 0 0 0 0
> [3,] 1.591205e-266 0 0 0 0
> [4,] 1.264128e-267 0 0 0 0
> [5,] 1.037656e-311 0 0 0 0
> > a <- A[i, ] ; crossprod(a)
> [,1] [,2] [,3] [,4] [,5]
> [1,] 0 0 0 0 0
> [2,] 0 0 0 0 0
> [3,] 0 0 0 0 0
> [4,] 0 0 0 0 0
> [5,] 0 0 0 0 0
> --------------- End of illustration------------
>
> The same problem does not appear using the matrix product:
>
> > a <- A[i, ] ; t(a) %*% a
> [,1] [,2] [,3] [,4] [,5]
> [1,] 0 0 0 0 0
> [2,] 0 0 0 0 0
> [3,] 0 0 0 0 0
> [4,] 0 0 0 0 0
> [5,] 0 0 0 0 0
>
> Note that Splus 6 returns an error message:
>
> > a <- A[i, ] ; crossprod(a)
>
> Problem in .Fortran.ok.Internal(if(cmplx) "zcrossp1"..:
> subroutine dcrossp1:
> Argument 1 has zero length
>
>
> Thank you,
>
> Giovanni
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo> /r-help
>
More information about the R-help
mailing list