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.