as.matrix.data.frame() modifies content of character columns (PR#386)

About this list Date view Thread view Subject view Author view Other groups

Subject: as.matrix.data.frame() modifies content of character columns (PR#386)
jens.oehlschlaegel-akiyoshi@mdfactory.de
Date: Thu 23 Dec 1999 - 01:23:00 EST


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 Oehlschlägel-Akiyoshi
MD FACTORY GmbH
Bayerstrasse 21

80335 München

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 _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


About this list Date view Thread view Subject view Author view Other groups

This archive was generated by hypermail 2b25 : Tue 04 Jan 2000 - 14:16:12 EST