[R] how to multiply a constant to a matrix?
Tony Plate
tplate at acm.org
Fri May 26 17:28:28 CEST 2006
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 <pburns at pburns.seanet.com> 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
>>patrick at burns-stat.com
>>+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]]
>>>
>>>______________________________________________
>>>R-help at stat.math.ethz.ch 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]]
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>
More information about the R-help
mailing list