I think of the methods of as.data.frame as a helper functions for

data.frame and don't usually call as.data.frame directly. data.frame()

will call as.data.frame for each of its arguments and then put together the

the results into one big data.frame.

> for(method in

c("as.data.frame.list","as.data.frame.character","as.data.frame.integer","as.data.frame.numeric","as.data.frame.matrix"))

trace(method, quote(str(x)))

Tracing function "as.data.frame.list" in package "base"

Tracing function "as.data.frame.character" in package "base"

Tracing function "as.data.frame.integer" in package "base"

Tracing function "as.data.frame.numeric" in package "base"

Tracing function "as.data.frame.matrix" in package "base"

> d <-

data.frame(Mat=cbind(m1=11:12,M2=13:14),Num=c(15.5,16.6),Int=17:18,List=list(L1=19:20,L2=c(20.2,21.2)))

Tracing as.data.frame.matrix(x[[i]], optional = TRUE) on entry

int [1:2, 1:2] 11 12 13 14

- attr(*, "dimnames")=List of 2

..$ : NULL

..$ : chr [1:2] "m1" "M2"

Tracing as.data.frame.numeric(x[[i]], optional = TRUE) on entry

num [1:2] 15.5 16.6

Tracing as.data.frame.integer(x[[i]], optional = TRUE) on entry

int [1:2] 17 18

Tracing as.data.frame.list(x[[i]], optional = TRUE, stringsAsFactors =

stringsAsFactors) on entry

List of 2

$ L1: int [1:2] 19 20

$ L2: num [1:2] 20.2 21.2

Tracing as.data.frame.integer(x[[i]], optional = TRUE) on entry

int [1:2] 19 20

Tracing as.data.frame.numeric(x[[i]], optional = TRUE) on entry

num [1:2] 20.2 21.2

If I recall correctly, that is how S did things and Splus tried to use

something like as.data.frameAux for the name of the helper function to

avoid some of the frustration you describe.

Bill Dunlap

TIBCO Software

wdunlap tibco.com

On Tue, Feb 5, 2019 at 2:22 PM Rolf Turner <

[hidden email]> wrote:

>

> Consider the following:

>

> set.seed(42)

> X <- matrix(runif(40),10,4)

> colnames(X) <- c("a","b","a:x","b:x") # Imitating the output

> # of model.matrix().

> D1 <- as.data.frame(X)

> D2 <- data.frame(X)

> names(D1)

> [1] "a" "b" "a:x" "b:x"

> names(D2)

> [1] "a" "b" "a.x" "b.x"

>

> The names of D2 are syntactically valid; those of D1 are not.

>

> Why should I have expected this phenomenon? :-)

>

> The as.data.frame() syntax seems to me much more natural for converting

> a matrix to a data frame, yet it doesn't get it quite right, sometimes,

> in respect of the names.

>

> Is there some reason that as.data.frame() does not apply make.names()?

> Or was this just an oversight?

>

> cheers,

>

> Rolf Turner

>

> --

> Honorary Research Fellow

> Department of Statistics

> University of Auckland

> Phone: +64-9-373-7599 ext. 88276

>

> ______________________________________________

>

[hidden email] mailing list -- To UNSUBSCRIBE and more, see

>

https://stat.ethz.ch/mailman/listinfo/r-help> PLEASE do read the posting guide

>

http://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.

>

[[alternative HTML version deleted]]

______________________________________________

[hidden email] mailing list -- To UNSUBSCRIBE and more, see

https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide

http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.