From maechler at stat.math.ethz.ch  Tue Mar 27 17:25:25 2007
From: maechler at stat.math.ethz.ch (Martin Maechler)
Date: Tue, 27 Mar 2007 17:25:25 +0200
Subject: [Rd] Unexpected result of as.character() and unlist() applied
	to a data frame
In-Reply-To: <1174967313.460894116113f@webmail.fhcrc.org>
References: <1174967313.460894116113f@webmail.fhcrc.org>
Message-ID: <17929.14181.944972.334471@stat.math.ethz.ch>

>>>>> "Herve" == Herve Pages <hpages at fhcrc.org>
>>>>>     on Mon, 26 Mar 2007 20:48:33 -0700 writes:

    Herve> Hi,
    >> dd <- data.frame(A=c("b","c","a"), B=3:1) dd
    Herve>   A B 1 b 3 2 c 2 3 a 1
    >> unlist(dd)
    Herve> A1 A2 A3 B1 B2 B3 2 3 1 3 2 1

    Herve> Someone else might get something different. It all
    Herve> depends on the values of its 'stringsAsFactors'  option:

yes, and I don't like that (last) fact either.
IMO, an option should never be allowed to influence such a basic
function as  data.frame().

I know I would have had time earlier to start discussing this,
but for some (probably good) reasons, I didn't get to it at the
time. 
As Andy comments, everything is behaving as it should / is documented,
including the  'stringsAsFactors' option;
but personally, I really would want to consider changing
the default for  data.frame()s stringAsFactors back (as
pre-R-2.4.0) to 'TRUE' instead of  default.stringsAsFactors()
which is a smart version of getOption("stringsAsFactors"). 
I find it ok ("acceptable") if its influencing  read.table()
but feel differently for data.frame().

Martin





    >> dd2 <- data.frame(A=c("b","c","a"), B=3:1,
    >>                   stringsAsFactors=FALSE)
    >> dd2
    Herve>   A B 1 b 3 2 c 2 3 a 1
    >> unlist(dd2)
    Herve>  A1 A2 A3 B1 B2 B3 "b" "c" "a" "3" "2" "1"

    Herve> Same thing with as.character:

    >> as.character(dd)
    Herve> [1] "c(2, 3, 1)" "c(3, 2, 1)"
    >> as.character(dd2)
    Herve> [1] "c(\"b\", \"c\", \"a\")" "c(3, 2, 1)"

    Herve> Bug or "feature"?

    Herve> Note that as.character applied directly on dd$A
    Herve> doesn't have this "feature":

    >> as.character(dd$A)
    Herve> [1] "b" "c" "a"
    >> as.character(dd2$A)
    Herve> [1] "b" "c" "a"

    Herve> Cheers, H.

    Herve> ______________________________________________
    Herve> R-devel at r-project.org mailing list
    Herve> https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] Unexpected result of as.character() and unlist() applied to a data frame
Martin Maechler