Hi, R may not have a special "scalar", but it is common, if informal, in linear algebra to refer to a 1 x 1 matrix as a scalar. Indeed, something like:
1:10 * matrix(2) or matrix(2) * 1:10 are both valid. Even matrix(2) %*% 1:10 and 1:10 %*% matrix(2) work, where the vector seems to be silently coerced to a matrix. R even seems to work hard to convert to a conformable matrix: ## works: 1:10 %*% matrix(1:10) ## does not work matrix(1:10) %*% matrix(1:10) ## works t(matrix(1:10)) %*% matrix(1:10) Interestingly, there is actually a (rather old) comment in arithmetic.c /* If either x or y is a matrix with length 1 and the other is a vector, we want to coerce the matrix to be a vector. Do we want to? We don't do it! BDR 2004-03-06 */ Given the coersion that already occurs with vectors to matrices for %*% and matrices to vectors for *, it seems not unreasonable to convert a 1 x 1 matrix to a vector _for_ * so that the following yields identical results: matrix(1:9, 3) * matrix(2) matrix(1:9, 3) * 2 Of course in the mean time, or in general, it is a good habit to create or explicity coerce objects yourself rather than relying on R to make smart guesses about what should be happening. Cheers, Josh On Sun, Nov 6, 2011 at 4:02 PM, R. Michael Weylandt <michael.weyla...@gmail.com> <michael.weyla...@gmail.com> wrote: > It looks like pdf is not a "scalar" (that term actually has no meaning in R > but I know what you mean) but is rather a 1x1 matrix, as attested by the fact > it has dimensions. If you give dnorm() a matrix it will return one, as it did > here. > > Perhaps you should look at the is.matrix() and as.vector() functions rather > than abusing a side-effect of c(), which makes it much more difficult to see > R's internal logic, which, while quirky, is useful at the end of the day. > > Michael > > PS - It's good form to cc the list at each step so others can follow along > and contribute when I say something wrong. It also helps you get quicker > answers. > > On Nov 6, 2011, at 1:06 AM, Steven Yen <s...@utk.edu> wrote: > >> I am trying to multiply what I know is a scalar (pdf(xb)) to a column vector >> of coefficient (bb). >> In the following, pdf is a scalar and bb is 5 x 1. I first show what worked >> and then what did not work. >> If my pdf is a scalar, why would I need c(pdf) to be able to pre-multiply it >> by a 5 x 1 vector? >> >> --- >> >> > x <- as.matrix(colMeans(x)) >> > xb <- t(x)%*%bb >> > pdf <- dnorm(xb) >> >> > dim(bb) >> [1] 5 1 >> >> > >> > cpdf <- c(pdf) >> > dim(cpdf) >> NULL >> > cpdf >> [1] 0.304201 >> > (dphat <- cpdf*bb) >> [,1] >> (Intercept) 0.32744753 >> xrage -0.00599225 >> xryr 0.01758431 >> xrrate -0.08217250 >> xrrel -0.05695434 >> > >> > pdf <- dnorm(xb) >> > dim(pdf) >> [1] 1 1 >> > pdf >> [,1] >> [1,] 0.304201 >> > (dphat <- pdf*bb) >> Error in pdf * bb : non-conformable arrays >> > >> >> At 12:21 AM 11/6/2011, you wrote: >>> There are a few (nasty?) side-effects to c(), one of which is >>> stripping a matrix of its dimensionality. E.g., >>> >>> x <- matrix(1:4, 2) >>> c(x) >>> [1] 1 2 3 4 >>> >>> So that's probably what happened to you. R has a somewhat odd feature >>> of not really considering a pure vector as a column or row vector but >>> being willing to change it to either: >>> >>> e.g. >>> >>> y <- 1:2 >>> >>> x %*% y >>> y %*% x >>> y %*% y >>> >>> while matrix(y) %*% x throws an error, which can also trip folks up. >>> You might also note that x * y and y*x return the same thing in this >>> problem. >>> >>> Getting back to your problem: what are v and b and what are you hoping >>> to get done? Specifically, what happened when you tried v*b (give the >>> exact error message). It seems likely that they are non-conformable >>> matrices, but here non-conformable for element-wise multiplication >>> doesn't mean the same thing as it does for matrix multiplication. >>> E.g., >>> >>> x <- matrix(1:4,2) >>> y <- matrix(1:6,2) >>> >>> dim(x) >>> [1] 2 2 >>> >>> dim(y) >>> [1] 2 3 >>> >>> x * y -- here R seems to want matrices with identical dimensions, but >>> i can't promise that. >>> >>> x %*% y does work. >>> >>> Hope this helps and yes I know it can seem crazy at first, but there >>> really is reason behind it at the end of the tunnel, >>> >>> Michael >>> >>> >>> On Sun, Nov 6, 2011 at 12:11 AM, Steven Yen <s...@utk.edu> wrote: >>> > My earlier attempt >>> > >>> > dp <- v*b >>> > >>> > did not work. Then, >>> > >>> > dp <- c(v)*b >>> > >>> > worked. >>> > >>> > Confused, >>> > >>> > Steven >>> > >>> > At 09:10 PM 11/4/2011, you wrote: >>> > >>> > Did you even try? >>> > >>> > a <- 1:3 >>> > x <- matrix(c(1,2,3,2,4,6,3,6,9),3) >>> > a*x >>> > >>> > [,1] [,2] [,3] >>> > [1,] 1 2 3 >>> > [2,] 4 8 12 >>> > [3,] 9 18 27 >>> > >>> > Michael >>> > >>> > On Fri, Nov 4, 2011 at 7:26 PM, Steven Yen <s...@utk.edu> wrote: >>> >> is there a way to do element-by-element multiplication as in Gauss >>> >> and MATLAB, as shown below? Thanks. >>> >> >>> >> --- >>> >> a >>> >> >>> >> 1.0000000 >>> >> 2.0000000 >>> >> 3.0000000 >>> >> x >>> >> >>> >> 1.0000000 2.0000000 3.0000000 >>> >> 2.0000000 4.0000000 6.0000000 >>> >> 3.0000000 6.0000000 9.0000000 >>> >> a.*x >>> >> >>> >> 1.0000000 2.0000000 3.0000000 >>> >> 4.0000000 8.0000000 12.000000 >>> >> 9.0000000 18.000000 27.000000 >>> >> >>> >> >>> >> -- >>> >> Steven T. Yen, Professor of Agricultural Economics >>> >> The University of Tennessee >>> >> http://web.utk.edu/~syen/ >>> >> [[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. >>> >> >>> > >>> > -- >>> > Steven T. Yen, Professor of Agricultural Economics >>> > The University of Tennessee >>> > http://web.utk.edu/~syen/ >> -- >> Steven T. Yen, Professor of Agricultural Economics >> The University of Tennessee >> http://web.utk.edu/~syen/ > > [[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. > -- Joshua Wiley Ph.D. Student, Health Psychology Programmer Analyst II, ATS Statistical Consulting Group University of California, Los Angeles https://joshuawiley.com/ ______________________________________________ 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.