Re: [Rd] pr[in]comp: predict single observation when data has colnames (PR#8325)

From: <murdoch_at_stats.uwo.ca>
Date: Fri 18 Nov 2005 - 14:02:28 GMT


On 11/18/2005 7:04 AM, bhx5@mevik.net wrote:
> To my knowledge, this has not been reported previously, and doesn't
> seem to have been changed in R-devel or R-patched.
>
> If M is a matrix with coloumn names, and
>
> mod <- prcomp(M) # or princomp
>
> then predicting a single observation (row) with predict() gives the
> error
>
> Error in scale.default(newdata, object$center, object$scale) :
> length of 'center' must equal the number of columns of 'x'
>
> This doesn't happen if M doesn't have coloumn names.
>
> For instance:
>
>

>>M <- matrix(rnorm(30), ncol = 3)
>>mod <- prcomp(M[-1,])
>>predict(mod, newdata = M[1,, drop = FALSE])

>
> PC1 PC2 PC3
> [1,] -1.666191 -2.333012 -1.424587
>
>
>>colnames(M) <- 1:3
>>mod <- prcomp(M[-1,])
>>predict(mod, newdata = M[1,, drop = FALSE])

>
> Error in scale.default(newdata, object$center, object$scale) :
> length of 'center' must equal the number of columns of 'x'
>
>
> I believe the problem is the line
>
> newdata <- newdata[, nm]
>
> in predict.prcomp (line 106 of prcomp.R) and predict.princomp (line 11
> of princomp-add.R), which should probably be
>
> newdata <- newdata[, nm, drop = FALSE]
>

Yes, I see the problem, and I agree with your correction. I'll commit a patch. Thanks!

Duncan Murdoch



R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Sat Nov 19 01:12:34 2005

This archive was generated by hypermail 2.1.8 : Fri 18 Nov 2005 - 16:21:06 GMT