[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