From jens.oehlschlaegel-akiyoshi@mdfactory.de  Wed Dec 22 15:23:00 1999
From: jens.oehlschlaegel-akiyoshi@mdfactory.de (jens.oehlschlaegel-akiyoshi@mdfactory.de)
Date: Wed, 22 Dec 1999 16:23:00 +0100 (MET)
Subject: as.matrix.data.frame() modifies content of character columns (PR#386)
Message-ID: <199912221523.QAA12780@pubhealth.ku.dk>



If you have the following dataframe:

> x <- data.frame(x=I(rep('"', 3)))

then

> as.matrix(x)[1,1] == x[1,1]
[1] FALSE

which seems to be WRONG to me.

Also I don't understand
> x
     x
1 \\\"
2 \\\"
3 \\\"


Details
=======

As expected
> unclass(x)
$x
[1] "\"" "\"" "\""
attr(,"class")
[1] "AsIs"

attr(,"row.names")
[1] "1" "2" "3"


but now look at this
correct:
> x[1,1]
[1] "\""

wrong:
> as.matrix(x)[1,1]
[1] "\\\""

this is not only a printing problem
correct:
> cat(x[1,1], "\n")
"

wrong:
> cat(as.matrix(x)[1,1], "\n")
\"


Interpretation
==============

To my understanding, this is caused, because as.matrix.data.frame makes use
of format, and format does

> cat(format('"'), "\n")
\"

If this is the cause and format() does right, then consequently

         format MUST NEVER be used within R routines EXCEPT FOR PRINTING,
         i.e. formatting something and storing it or returning it from a
function is dangerous.
         Even the use for cat() may be dangerous, as cat() as a side effect
may store data,
         as in write() or write.table(). This deserves a BIG warning in the
documentation of format.

Here is a list of functions of package:base making use of format

> collect <- character()
> for (i in ls("package:base")){
+   if (   any(grep("format[(]", deparse(get(i, pos="package:base"))))
+       || any(grep("format.default[(]", deparse(get(i,
pos="package:base"))))
+      )collect <- c(collect, i)
+ }
> collect
 [1] "add1.default"          "add1.glm"              "add1.lm"
"all.equal.numeric"
 [5] "anovalist.lm"          "as.matrix.data.frame"  "drop1.default"
"drop1.glm"
 [9] "drop1.lm"              "format.char"           "format.default"
"format.pval"
[13] "help.search"           "hist.default"          "legend"
"ls.print"
[17] "print.aov"             "print.aovlist"         "print.coefmat"
"print.dummy.coef"
[21] "print.glm"             "print.glm.null"        "print.htest"
"print.lm"
[25] "print.mtable"          "print.summary.glm"     "print.summary.lm"
"print.summary.lm.null"
[29] "print.tables.aov"      "print.ts"              "quantile.default"
"step"
[33] "str.default"           "summary.aov"           "summary.data.frame"
"summary.default"
[37] "summary.infl"          "symnum"



platform Windows
arch     x86
os       Win32
system   x86, Win32
status
major    0
minor    90.1
year     1999
month    December
day      15
language R


--
Dr. Jens Oehlschlgel-Akiyoshi
MD FACTORY GmbH
Bayerstrasse 21

80335 Mnchen

Tel.: 089 545 28-27
Fax.: 089 545 28-10
http://www.mdfactory.de

Standard Disclaimers: Opinions expressed here are personal
and are not otherwise represented.



-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


as.matrix.data.frame() modifies content of character columns (PR#386)
jens.oehlschlaegel-akiyoshi@mdfactory.de