From s.wood at bath.ac.uk  Thu Mar 26 16:17:33 2009
From: s.wood at bath.ac.uk (Simon Wood)
Date: Thu, 26 Mar 2009 15:17:33 +0000
Subject: [Rd] get_all_vars fails with matrices (PR#13624)
In-Reply-To: <49CA7DEE.50402@biostat.ku.dk>
References: <20090325171010.619532834149@mail.pubhealth.ku.dk>
	<49CA7DEE.50402@biostat.ku.dk>
Message-ID: <200903261517.33443.s.wood@bath.ac.uk>

It's not just lists that are odd...

> X <- matrix(1:15,5,3)
> z <- 26:30
> model.frame(~z+X)
   z X.1 X.2 X.3
1 26   1   6  11
2 27   2   7  12
3 28   3   8  13
4 29   4   9  14
5 30   5  10  15
> get_all_vars(~z+X)
[1] z    X    <NA> <NA>

... which is again a problem when trying to pick up unprocessed versions of 
the variables used by a modelling function....   


On Wednesday 25 March 2009 18:54, Peter Dalgaard wrote:
> s.wood at bath.ac.uk wrote:
> > Hi,
> >
> > According to the help file for model.frame/get_all_vars, the following
> > should produce the same output from both functions, but it doesn't...
> >
> >> dat <- list(X=matrix(1:15,5,3),z=26:30)
> >> model.frame(~z+X,dat)
> >
> >    z X.1 X.2 X.3
> > 1 26   1   6  11
> > 2 27   2   7  12
> > 3 28   3   8  13
> > 4 29   4   9  14
> > 5 30   5  10  15
> >
> >> get_all_vars(~z+X,dat)
> >
> > [1] z    X    <NA> <NA>
> > <0 rows> (or 0-length row.names)
> >
> > -- the equivalent works ok if there are no matrices involved.
> >
> > I'm using  R version 2.9.0 alpha (2009-03-24 r48212) (Suse linux 10 and
> > 11, 64 bit intel). I found the problem while trying to fix a problem in
> > an mgcv plotting routine.
> >
> > best,
> > Simon
>
> This works, though:
>  > dat <- data.frame(X=I(matrix(1:15,5,3)),z=26:30)
>  > get_all_vars(~z+X,dat)
>
>     z X.1 X.2 X.3
> 1 26   1   6  11
> 2 27   2   7  12
> 3 28   3   8  13
> 4 29   4   9  14
> 5 30   5  10  15
>
> but there is something special with lists:
>  > dat <- as.data.frame(list(X=I(matrix(1:15,5,3)),z=26:30))
>  > get_all_vars(~z+X,dat)
>
>     z X.1 X.2 X.3
> 1 26   1   6  11
> 2 27   2   7  12
> 3 28   3   8  13
> 4 29   4   9  14
> 5 30   5  10  15
>
>  > dat <- data.frame(list(X=I(matrix(1:15,5,3)),z=26:30))
>  > get_all_vars(~z+X,dat)
>
>     z X.1 X.2 X.3
> 1 26   1   6  11
> 2 27   2   7  12
> 3 28   3   8  13
> 4 29   4   9  14
> 5 30   5  10  15
>
>  > dat <- list(X=I(matrix(1:15,5,3)),z=26:30)
>  > get_all_vars(~z+X,dat)
>
> [1] z X
> <0 rows> (or 0-length row.names)

-- 
> Simon Wood, Mathematical Sciences, University of Bath, Bath, BA2 7AY UK
> +44 1225 386603  www.maths.bath.ac.uk/~sw283



[Rd] get_all_vars fails with matrices (PR#13624)
Simon Wood