The documentation of as.data.frame is not explicit about how it generates
column names for the simple vector case, but it seems to use the character
form of the quoted argument, e.g.

names(as.data.frame(1:3))
[1] "1:3"

But there is a strange case:

names(as.data.frame(c("a")))
[1] "if (stringsAsFactors) factor(x) else x"

I feel fairly comfortable calling this a bug, though there is no explicit
specification.

There is another strange case which I don't understand.

The specification of 'optional' is:

   optional: logical. If 'TRUE', setting row names and converting column
          names (to syntactic names: see 'make.names') is optional.

I am not sure what this means and why it is useful.  In practice, it seems
to produce a structure of class data.frame which exhibits some very odd
behavior:

> d <- as.data.frame(c("a"),optional=TRUE)
> class(d)
[1] "data.frame"
> d
  structure("a", class = "AsIs")                   <<< where does this
column name come from?
1                              a
> names(d)
NULL                                            <<< not from names()
> dput(d)
structure(list(structure(1L, .Label = "a", class = "factor")), row.names =
c(NA,
-1L), class = "data.frame")            <<< and it doesn't show up in dput

             -s

	[[alternative HTML version deleted]]

