On Mon, Nov 9, 2009 at 12:24 PM, Duncan Murdoch <murd...@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, 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 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@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel