Dataframes are lists. Look at dat with str and you will see that the
third column (actually the third list element) is a matrix. It's not
hard to find the documentation. If you read the documentation on the
help page for data.frame you should see this:
"If a list or data frame or matrix is passed to data.frame it is as if
each component or column had been passed as a separate argument
(except for matrices of class"model.matrix" and those protected by
I)."
It seems reasonable that poly() returns an object that is considered a
model.matrix.
On Jul 17, 2009, at 12:54 PM, Ulrike Gr?mping wrote:
>
> Dear UseRs,
>
> I just learnt that the number of columns of a data frame is not
> always what
> I thought it to be, and I wonder where I should have learnt about
> this.
> Consider the following example:
>
> dat <- data.frame(X1=1:10, X2=LETTERS[1:10])
> ncol(dat) ## evaluates to 2 (of course)
> dat$X1poly <- poly(dat$X1,3)
> dat ## five columns displayed
> ncol(dat) ## evaluates to 3
> colnames(dat) ## three names (third is X1poly)
> colnames(dat)[3] <- "newname"
> dat ## all three previous X1poly columns renamed
>
> This appears intentional, as it treats the column names reasonably.
> Where is
> it documented ? Are there any other scenarios for which the number of
> columns displayed when printing a data frame does not coincide with
> ncol ?
>
> Regards, Ulrike
David Winsemius, MD
Heritage Laboratories
West Hartford, CT