From gabraham at csse.unimelb.edu.au  Sun May 18 11:15:07 2008
From: gabraham at csse.unimelb.edu.au (gabraham at csse.unimelb.edu.au)
Date: Sun, 18 May 2008 11:15:07 +0200 (CEST)
Subject: [Rd] predict.prcomp: wrong check for matrix dimensions (PR#11482)
Message-ID: <20080518091507.BCC10282EFF1@mail.pubhealth.ku.dk>

Full_Name: Gad Abraham
Version: 2.7.0
OS: Ubuntu Linux
Submission from: (NULL) (59.167.148.182)


Description:
============

> x1 <- matrix(rnorm(100), 5, 20)
> x2 <- matrix(rnorm(100), 5, 20)
> p <- prcomp(x1)
> predict(p, x2)
Error in predict.prcomp(p, x2) :
  'newdata' does not have the correct number of columns
> dim(x2)
[1]  5 20
> dim(p$rotation)
[1] 20  5

All predict.prcomp really does is x2 %*% p$rotation, which is a perfectly 
legal operation that should yield a 5x5 matrix:

> dim(x2 %*% p$rotation)
[1] 5 5

Solution:
=========

Change
   p <- NCOL(object$rotation)
to
   p <- NROW(object$rotation)

This bug is still present in R-patched_2008-05-16.

> sessionInfo()
R version 2.7.0 (2008-04-22) 
x86_64-unknown-linux-gnu 

locale:
LC_CTYPE=en_AU.UTF-8;LC_NUMERIC=C;LC_TIME=en_AU.UTF-8;LC_COLLATE=en_AU.UTF-8;LC_MONETARY=C;LC_MESSAGES=en_AU.UTF-8;LC_PAPER=en_AU.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_AU.UTF-8;LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base



[Rd] predict.prcomp: wrong check for matrix dimensions (PR#11482)
gabraham at csse.unimelb.edu.au