Hi, Josh & Fabian:

       Thanks for the replies.


On 4/3/2014 12:07 AM, Joshua Wiley wrote:
> Hi Spencer,
>
> One piece is that a data frame of the same dimensions as went in comes 
> out.  The second piece is that the vector is recycled.
>
> So in your first example:
>
> data.frame(1) * 1:4
>
> you only end up with the first element:
>
> data.frame(1) * 1
>
> If you try:
>
> data.frame(1) * 4:1
>
> you get a data frame with a value of 4.
>
> Now for:
>
> data.frame(1:2, 3:4) * 5:7
>
> recycling kicks in again, and you get:
>
> 1 * 5, 2 * 6, 3 * 7, and 4 * 5
>
> When working with vectors, you get recycling and it expands to the 
> greater length vector:
>
> 1:3 * 1:6
>
> has length 6.  But data frames are sort of a 'higher' class and the 
> dimensions of the data frame trump the vector.
>
> A slightly different behavior is observed for matrices:
>
> matrix(1:6, ncol=2) * 1:3
>
> Gives recycling as expected to the longer of the vectors, but
>
> matrix(1:6, ncol=2) * 1:9
>
> gives an error, but the error is _not_ directly in the multiplication, 
> as it were, but rather the results (which because matrices are stored 
> as vectors has expanded to be the length of the longer vector, here 
> 1:9) do not match the input dimensions of the matrix.  In particular, 
> this is the same as trying to do:
>
> x <- 1:9
> attributes(x)$dim <- c(3, 2)
> Error in attributes(x)$dim <- c(3, 2) :
>   dims [product 6] do not match the length of object [9]
>
> basically, R gets the result of 1:6 * 1:9, but then cannot format it 
> back as a matrix, because the saved dimensions do not fit the new 
> resulting data.  You can verify that R does indeed to the calculations 
> if you go under the hood --- the multiplication is done, and then it 
> tries to apply the dims and it errors out.


       Thanks again:  This was the insight I was looking for.  I was 
expecting an error or at least a warning and was surprised when I didn't 
get one.


       Best Wishes,
       Spencer

>
> Cheers,
>
> Josh
>
>
>
>
>
>
> On Wed, Apr 2, 2014 at 11:42 PM, Spencer Graves 
> <spencer.gra...@structuremonitoring.com 
> <mailto:spencer.gra...@structuremonitoring.com>> wrote:
>
>     Hello, All:
>
>
>           What's the logic behind "data.frame(1)*1:4" producing a
>     scalar 1?  Or the following:
>
>
>      data.frame(1:2, 3:4)*5:7
>       X1.2 X3.4
>     1    5   21
>     2   12   20
>
>
>           I stumbled over this, because I thought I was multiplying a
>     scalar times a vector, and obtaining a scalar rather than the
>     anticipated vector.  I learned that my "scalar" was in fact a
>     data.frame with one row and one column.
>
>
>           What am I missing?
>
>
>           Thanks,
>           Spencer
>
>     ______________________________________________
>     R-help@r-project.org <mailto:R-help@r-project.org> mailing list
>     https://stat.ethz.ch/mailman/listinfo/r-help
>     PLEASE do read the posting guide
>     http://www.R-project.org/posting-guide.html
>     and provide commented, minimal, self-contained, reproducible code.
>
>
>
>
> -- 
> Joshua Wiley
> Ph.D. Student, Health Psychology
> University of California, Los Angeles
> http://joshuawiley.com/
> Senior Analyst - Elkhart Group Ltd.
> http://elkhartgroup.com
> 260.673.5518


-- 
Spencer Graves, PE, PhD
President and Chief Technology Officer
Structure Inspection and Monitoring, Inc.
751 Emerson Ct.
San José, CA 95126
ph:  408-655-4567
web:  www.structuremonitoring.com


        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to