Re: [Rd] Bug in all.equal() or in the plm package

From: Steven McKinney <smckinney_at_bccrc.ca>
Date: Tue, 10 Nov 2009 11:17:53 -0800

> -----Original Message-----
> From: r-devel-bounces_at_r-project.org [mailto:r-devel-bounces_at_r-
> project.org] On Behalf Of Arne Henningsen
> Sent: Tuesday, November 10, 2009 2:24 AM
> To: Duncan Murdoch; r-devel_at_r-project.org; Yves Croissant;
> Giovanni_Millo_at_generali.com; Achim Zeileis
> Subject: Re: [Rd] Bug in all.equal() or in the plm package
>
> On Mon, Nov 9, 2009 at 12:24 PM, Duncan Murdoch <murdoch_at_stats.uwo.ca>
> wrote:
> > Arne Henningsen wrote:
> >>
> >> I noticed that there is a (minor) bug either the command all.equal()
> >> or in the "plm" package. I demonstrate this using an example taken
> >> from the documentation of plm():
> >>
> >
> > I'm not sure this is a bug, but I'd call it at least a design flaw.
>  The
> > problem is that the length.Formula method in the Formula package
> (which plm
> > depends on) returns a vector of length 2.  Now there's nothing in R
> that
> > requires length() to return a scalar,

No, but outside of R, length is a one dimensional real number except perhaps in some esoteric mathematics, so I'm puzzled why length in R would be redefined to produce non-scalars.

> >but all.equal assumes it does,
> and I'd
> > guess there are lots of other places this assumption is made.
>
> Okay, let's call it "design flaw". Given that the "unusual" behaviour
> of length.Formula() causes this problem, I suggest that the
> length.Formula() method should be changed. Maybe to something like
>
> R> a <- as.Formula( y ~ x | z | w )
> # current behaviour:
> R> length(a)
> [1] 1 3
> # suggested behaviour:
> R> length(a)
> [1] 2
> R> length(a[[1]])
> [1] 1
> R> length(a[[2]])
> [1] 3
>

How about
# Total number of variables in model
R> length(a)
[1] 4

# Predictor variables (on the right hand side) pred(a) or rhs(a) R> length(pred(a))
[1] 3

# Response variables (on the left hand side) resp(a) or lhs(a) R> length(resp(a))
[1] 1

so all lengths of a formula's components can be obtained as scalars.

R> length(a)
[1] 3
is what R 2.9.1 produced, and may often be what is expected for the length of a formula, so the above could be

# Total number of variables in model
R> length(total(a))
[1] 4

# Predictor variables (on the right hand side) pred(a) or rhs(a) R> length(a)
[1] 3

# Response variables (on the left hand side) resp(a) or lhs(a) R> length(resp(a))
[1] 1

Steve McKinney

> This would be more consistent with the usual behaviour of length, e.g.
> R> b <- list( 1, 1:3 )
> R> length(b)
> [1] 2
> R> length(b[[1]])
> [1] 1
> R> length(b[[2]])
> [1] 3
>
> /Arne
>
>
> >> ======================================
> >> R> data("Produc", package="plm")
> >> R> zz <- plm(log(gsp)~log(pcap)+log(pc)+log(emp)+unemp,
> >> +   data=Produc, index=c("state","year"))
> >> R> all.equal(zz,zz)
> >> [1] TRUE
> >> Warning message:
> >> In if (length(target) != length(current)) return(paste("target,
> >> current differ in having response: ",  :
> >>  the condition has length > 1 and only the first element will be
> used
> >>
> >>>
> >>> all.equal(zz$formula,zz$formula)
> >>>
> >>
> >> [1] TRUE
> >> Warning message:
> >> In if (length(target) != length(current)) return(paste("target,
> >> current differ in having response: ",  :
> >>  the condition has length > 1 and only the first element will be
> used
> >>
> >>>
> >>> class(zz$formula)
> >>>
> >>
> >> [1] "pFormula" "Formula"  "formula"
> >> ======================================
> >>
> >> The last commands show that the warning message comes from comparing
> >> the elements "formula", which are of the class "pFormula"
> (inheriting
> >> from "Formula" and "formula"). It would be great if this issue could
> >> be fixed in the future.
> >>
> >> Thanks a lot,
> >> Arne
>
> --
> Arne Henningsen
> http://www.arne-henningsen.name
>
> ______________________________________________
> R-devel_at_r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue 10 Nov 2009 - 19:24:36 GMT

This archive was generated by hypermail 2.2.0 : Tue 10 Nov 2009 - 20:00:23 GMT