I was writing some assertion tests for modelling-related
code I had written and was surprised to see one test
fail because the "specials" attribute of the output of
terms() is a "pairlist" instead of a "list". In 2.12.0
I get:
> dput(attr(terms(y~Spec(x1)+x2, specials=c("Spec")), "specials"))
list(Spec = 2L)
> all.equal(attr(terms(y~Spec(x1)+x2, specials=c("Spec")),
"specials"), list(Spec=2L))
[1] "Modes: pairlist, list"
> all.equal(attr(terms(y~Spec(x1)+x2, specials=c("Spec")),
"specials"), pairlist(Spec=2L))
[1] TRUE
> identical(attr(terms(y~Spec(x1)+x2, specials=c("Spec")),
"specials"), pairlist(Spec=2L))
[1] TRUE
I was wondering if there was a reason for using pairlist
instead of list here or it it was just an historical
artifact. In general, when should one use pairlists?
Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
when to use pairlist instead list
2 messages · William Dunlap, Brian Ripley
On Mon, 6 Dec 2010, William Dunlap wrote:
I was writing some assertion tests for modelling-related code I had written and was surprised to see one test fail because the "specials" attribute of the output of terms() is a "pairlist" instead of a "list". In 2.12.0 I get:
> dput(attr(terms(y~Spec(x1)+x2, specials=c("Spec")), "specials"))
list(Spec = 2L)
> all.equal(attr(terms(y~Spec(x1)+x2, specials=c("Spec")),
"specials"), list(Spec=2L)) [1] "Modes: pairlist, list"
> all.equal(attr(terms(y~Spec(x1)+x2, specials=c("Spec")),
"specials"), pairlist(Spec=2L)) [1] TRUE
> identical(attr(terms(y~Spec(x1)+x2, specials=c("Spec")),
"specials"), pairlist(Spec=2L)) [1] TRUE I was wondering if there was a reason for using pairlist instead of list here or it it was just an historical artifact. In general, when should one use pairlists?
Probably never directly. But indirectly, a lot as for example argument lists are pairlists. Looking at the code, I think this one is simply history. For completeness I will correct ?terms.object.
Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595