[Rd] Problem in matrix definition?
(Ted Harding)
Ted.Harding at manchester.ac.uk
Mon Aug 31 11:00:09 CEST 2009
Does the following help to clarify things?
>From your original two different definitions of the matrix 'a':
mp <- 10
np <- 5
a <- matrix(c(1:mp*np),mp,np)
a
# [,1] [,2] [,3] [,4] [,5]
# [1,] 5 5 5 5 5
# [2,] 10 10 10 10 10
# [3,] 15 15 15 15 15
# [4,] 20 20 20 20 20
# [5,] 25 25 25 25 25
# [6,] 30 30 30 30 30
# [7,] 35 35 35 35 35
# [8,] 40 40 40 40 40
# [9,] 45 45 45 45 45
# [10,] 50 50 50 50 50
a <- matrix(c(1:50),mp,np)
a
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 11 21 31 41
# [2,] 2 12 22 32 42
# [3,] 3 13 23 33 43
# [4,] 4 14 24 34 44
# [5,] 5 15 25 35 45
# [6,] 6 16 26 36 46
# [7,] 7 17 27 37 47
# [8,] 8 18 28 38 48
# [9,] 9 19 29 39 49
# [10,] 10 20 30 40 50
Check what is said about precedence in '?Syntax'. The effect of
"c(1:mp*np)" is (1:mp)*np, i.e. first create (1:mp), and then
multiuply each element by np. So, with mp=10, np=5, you first get
c(1,2,3,4,5,6,7,8,9,10) from (1:10), and then
c(5,10,15,20,25,30,35,40,45,50) after multiplying this by 5.
This vector with 10 elements is then recycled 5 times over
when you ask for "a <- matrix(c(1:mp*np),mp,np)", i.e. the
equivalent of
a <- matrix(c(5,10,15,20,25,30,35,40,45,50),10,5)
On the other hand, a <- matrix(c(1:50),10,5) does what you expected!
Hoping this helps,
Ted.
On 31-Aug-09 08:21:34, Uwe Ligges wrote:
> Try to learn how to debug.
> The following copied from my R session might give you some hints:
>
> > options(error=recover)
> > geninv(a)
> Error in L[k:n, 1:(r - 1)] %*% (t(L[k, 1:(r - 1)])) :
> non-conformable arguments
>
> Enter a frame number, or 0 to exit
>
> 1: geninv(a)
>
> Selection: 1
> Called from: eval(expr, envir, enclos)
> Browse[1]> (t(L[k, 1:(r - 1)]))
> [,1] [,2]
> [1,] 75.68261 29.277
> Browse[1]> L[k:n, 1:(r - 1)]
> [,1] [,2]
> [1,] 75.68261 29.2770
> [2,] 103.71320 43.9155
> [3,] 131.74380 58.5540
>
>
>
> Best,
> Uwe Ligges
>
>
>
>
> Fabio Mathias Corrêa wrote:
>> I'm implementing a function to compute the moore-penrose inverse,
>> using a code from the article: Fast Computation of Moore-Penrose
>> Inverse Matrices. Neural Information Processing - Letters and Reviews.
>> Vol.8, No.2, August 2005
>>
>> However, the R presents an error message when I use the geninv.
>>
>> The odd thing is that the error occurs for some arrays, however they
>> have the same size. And the R indicates the lack of compatibility
>> between the matrix!
>>
>> Below is an example:
>>
>> Creating the function geninv
>>
>> geninv <- function(x)
>> {
>> m <- dim(x)[1]
>> n <- dim(x)[2]
>> tr <- 0
>> if(m < n) {
>> a <- tcrossprod(x)
>> n <- m
>> tr <- 1
>> }
>> else a <- crossprod(x)
>> dA <- diag(a)
>> tol=min(dA[dA>0])*1e-9
>> L = a*0
>> r = 0
>> for(k in 1:n){
>> r = r+1
>> L[k:n,r] = a[k:n,k]-(L[k:n,1:(r-1)]%*%(t(L[k,1:(r-1)])))
>> if(L[k,r] > tol){
>> L[k,r] <- sqrt(L[k,r])
>> if (k < n) L[(k+1):n,r] <- L[(k+1):n,r]/L[k,r]
>> }
>> else r <- r-1
>> }
>> L <- L[,1:r]
>> M <- solve(crossprod(L))
>> if (tr == 1) Y <- t(x)%*%L%*%M%*%M%*%t(L)
>> else Y <- L%*%M%*%M%*%t(L)%*%t(x)
>> return(Y)
>> }
>>
>> # Perfect result! This result is identical of the function ginv!
>>
>> library(MASS)
>> mp <- 10
>> np <- 5
>> a <- matrix(c(1:mp*np),mp,np)
>> dim(a) # 10,5
>> geninv(a)
>> ginv(a)
>>
>> # Problem
>> a <- matrix(c(1:50),mp,np) # The difference is the vector (1:50)
>> dim(a) # 10,5
>>
>> geninv(a)
>> Error in L[k:n, 1:(r - 1)] %*% (t(L[k, 1:(r - 1)])) :
>> arguments are not compatible
>>
>>
>> The problem this in matrix definition?
>>
>> Thanks very much!
>>
>> Fábio Mathias Corrêa
>> Estatística e Experimentação Agropecuária/UFLA
>>
>>
>>
>> _________________________________________________________________
>> ___________________
>> Veja quais são os assuntos do momento no Yahoo! +Buscados
>> http://br.maisbuscados.yahoo.com
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
--------------------------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at manchester.ac.uk>
Fax-to-email: +44 (0)870 094 0861
Date: 31-Aug-09 Time: 10:00:04
------------------------------ XFMail ------------------------------
More information about the R-devel
mailing list