This is very strange:
I want compute the following in R: g = B/D * solve(A) where B and D are quadratics so they are just a scalar number, e.g. B=t(a) %*% F %*% a; I want to multiply B/D to A^(-1), but R just does not allow me to do that and it keeps complaining that "nonconformable array, etc." I tried the following two tricks and they worked: as.numeric(B/D) * solve(A) diag(as.numeric(B/D), 5, 5) %*% solve (A) ---------------------------- But if R cannot intelligently do scalar and matrix multiplication, it is really problemetic. It basically cannot be used to do computations, since in complicated matrix algebras, you have to distinguish where is scalar, and scalars obtained from quadratics cannot be directly used to multiply another matrix, etc. It is going to a huge mess... Any thoughts? [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html |
imagine when you have complicated matrix algebra computation using R,
you cannot prevent some middle-terms become quadratic and absorbs into one scalar, right? if R cannot intelligently determine this, and you have to manually add "drop" everywhere, do you think it is reasonable? On 5/23/06, Patrick Burns <[hidden email]> wrote: > > I think > > drop(B/D) * solve(A) > > would be a more transparent approach. > > It isn't that R can not do what you want, it is that > it is saving you from shooting yourself in the foot > in your attempt. What you are doing is not really > a matrix computation. > > > Patrick Burns > [hidden email] > +44 (0)20 8525 0696 > http://www.burns-stat.com > (home of S Poetry and "A Guide for the Unwilling S User") > > Michael wrote: > > >This is very strange: > > > >I want compute the following in R: > > > >g = B/D * solve(A) > > > >where B and D are quadratics so they are just a scalar number, e.g. > B=t(a) > >%*% F %*% a; > > > >I want to multiply B/D to A^(-1), > > > >but R just does not allow me to do that and it keeps complaining that > >"nonconformable array, etc." > > > > > >I tried the following two tricks and they worked: > > > >as.numeric(B/D) * solve(A) > > > >diag(as.numeric(B/D), 5, 5) %*% solve (A) > > > >---------------------------- > > > >But if R cannot intelligently do scalar and matrix multiplication, it is > >really problemetic. > > > >It basically cannot be used to do computations, since in complicated > matrix > >algebras, you have to distinguish where is scalar, and scalars obtained > from > >quadratics cannot be directly used to multiply another matrix, etc. It is > >going to a huge mess... > > > >Any thoughts? > > > > [[alternative HTML version deleted]] > > > >______________________________________________ > >[hidden email] mailing list > >https://stat.ethz.ch/mailman/listinfo/r-help > >PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html > > > > > > > > > [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html |
I still can't see why this is a problem. If a 1x1 matrix should be
treated as a scalar, then it can just be wrapped in drop(), and the arithmetic will be computed correctly by R. Are there any cases where this cannot be done? More specifically, are there any matrix algebra expressions where, depending on the particular dimensions of the variables used, drop() must be used in some cases, and not in other cases? A related but different behavior is the default dropping dimensions with extent equal to one by indexing operations. This can be problematic because if one is not careful, incorrect results can be obtained for particular values used in the expression. For example, consider the following, in which we are trying to compute the cross product of some columns of x with some rows of y. If x has n rows and y has n columns, then the result should always be an nxn matrix. However, if we are not careful with using drop=F in the indexing expressions, we can inadvertently end up with a 1x1 inner product matrix result for the case where we just use one column of x and one row of y. The solution to this is to always use drop=F in indexing in situations where this can occur. > x <- matrix(1:9, ncol=3) > y <- matrix(-(1:9), ncol=3) > i <- 1:2 > x[,i] %*% y[i,] [,1] [,2] [,3] [1,] -9 -24 -39 [2,] -12 -33 -54 [3,] -15 -42 -69 > i <- 1:3 > x[,i] %*% y[i,] [,1] [,2] [,3] [1,] -30 -66 -102 [2,] -36 -81 -126 [3,] -42 -96 -150 > # i has just one element -- the expression without drop=F > # no longer computes an outer product > i <- 2 > x[,i] %*% y[i,] [,1] [1,] -81 > x[,i,drop=F] %*% y[i,,drop=F] [,1] [,2] [,3] [1,] -8 -20 -32 [2,] -10 -25 -40 [3,] -12 -30 -48 > Cannot all cases in the situations you mention be handled in an analogous manner, by always wrapping appropriate quadratic expressions in drop(), or are there some cases where the result of the quadratic expression must be treated as a matrix, and other cases where the result of the quadratic expression must be treated as a scalar? -- Tony Plate Michael wrote: > imagine when you have complicated matrix algebra computation using R, > > you cannot prevent some middle-terms become quadratic and absorbs into one > scalar, right? > > if R cannot intelligently determine this, and you have to manually add > "drop" everywhere, > > do you think it is reasonable? > > On 5/23/06, Patrick Burns <[hidden email]> wrote: > >>I think >> >>drop(B/D) * solve(A) >> >>would be a more transparent approach. >> >>It isn't that R can not do what you want, it is that >>it is saving you from shooting yourself in the foot >>in your attempt. What you are doing is not really >>a matrix computation. >> >> >>Patrick Burns >>[hidden email] >>+44 (0)20 8525 0696 >>http://www.burns-stat.com >>(home of S Poetry and "A Guide for the Unwilling S User") >> >>Michael wrote: >> >> >>>This is very strange: >>> >>>I want compute the following in R: >>> >>>g = B/D * solve(A) >>> >>>where B and D are quadratics so they are just a scalar number, e.g. >> >>B=t(a) >> >>>%*% F %*% a; >>> >>>I want to multiply B/D to A^(-1), >>> >>>but R just does not allow me to do that and it keeps complaining that >>>"nonconformable array, etc." >>> >>> >>>I tried the following two tricks and they worked: >>> >>>as.numeric(B/D) * solve(A) >>> >>>diag(as.numeric(B/D), 5, 5) %*% solve (A) >>> >>>---------------------------- >>> >>>But if R cannot intelligently do scalar and matrix multiplication, it is >>>really problemetic. >>> >>>It basically cannot be used to do computations, since in complicated >> >>matrix >> >>>algebras, you have to distinguish where is scalar, and scalars obtained >> >>from >> >>>quadratics cannot be directly used to multiply another matrix, etc. It is >>>going to a huge mess... >>> >>>Any thoughts? >>> >>> [[alternative HTML version deleted]] >>> >>>______________________________________________ >>>[hidden email] mailing list >>>https://stat.ethz.ch/mailman/listinfo/r-help >>>PLEASE do read the posting guide! >> >>http://www.R-project.org/posting-guide.html >> >>> >>> >>> > > [[alternative HTML version deleted]] > > ______________________________________________ > [hidden email] mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html > ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html |
In reply to this post by LosemindL
>>>>> "comtech" == comtech usa <[hidden email]>
>>>>> on Tue, 23 May 2006 23:14:21 -0700 writes: comtech> imagine when you have complicated matrix algebra computation using R, comtech> you cannot prevent some middle-terms become quadratic and absorbs into one comtech> scalar, right? comtech> if R cannot intelligently determine this, and you have to manually add comtech> "drop" everywhere, comtech> do you think it is reasonable? I don't think you can find any reasonable example where `` you have to manually add "drop" everywhere ''. To the contrary: In my experience, the S behavior (which won't be changed -- forget about that if you still consider it!!), is even rather useful, pointing to ``infelicities'' in your code most of the time, when matrix dimensions do not match. Further note, that c( <1x1--matrix> ) also produces a scalar and gives slightly more readable formulae --- however in the present case, c() is only advisable if you *know* you don't have a ``proper'' (n x k, with n, k > 1) matrix. Martin Maechler, ETH Zurich comtech> On 5/23/06, Patrick Burns <[hidden email]> wrote: >> >> I think >> >> drop(B/D) * solve(A) >> >> would be a more transparent approach. >> >> It isn't that R can not do what you want, it is that >> it is saving you from shooting yourself in the foot >> in your attempt. What you are doing is not really >> a matrix computation. >> >> >> Patrick Burns >> [hidden email] >> +44 (0)20 8525 0696 >> http://www.burns-stat.com >> (home of S Poetry and "A Guide for the Unwilling S User") >> >> Michael wrote: >> >> >This is very strange: >> > >> >I want compute the following in R: >> > >> >g = B/D * solve(A) >> > >> >where B and D are quadratics so they are just a scalar number, e.g. >> B=t(a) >> >%*% F %*% a; >> > >> >I want to multiply B/D to A^(-1), >> > >> >but R just does not allow me to do that and it keeps complaining that >> >"nonconformable array, etc." >> > >> > >> >I tried the following two tricks and they worked: >> > >> >as.numeric(B/D) * solve(A) >> > >> >diag(as.numeric(B/D), 5, 5) %*% solve (A) >> > >> >---------------------------- >> > >> >But if R cannot intelligently do scalar and matrix multiplication, it is >> >really problemetic. >> > >> >It basically cannot be used to do computations, since in complicated >> matrix >> >algebras, you have to distinguish where is scalar, and scalars obtained >> from >> >quadratics cannot be directly used to multiply another matrix, etc. It is >> >going to a huge mess... >> > >> >Any thoughts? >> > >> > [[alternative HTML version deleted]] >> > >> >______________________________________________ >> >[hidden email] mailing list >> >https://stat.ethz.ch/mailman/listinfo/r-help >> >PLEASE do read the posting guide! >> http://www.R-project.org/posting-guide.html >> > >> > >> > >> > >> comtech> [[alternative HTML version deleted]] comtech> ______________________________________________ comtech> [hidden email] mailing list comtech> https://stat.ethz.ch/mailman/listinfo/r-help comtech> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html |
Free forum by Nabble | Edit this page |