[Rd] possible BUG with as.data.frame() and/or [.data.frame
Prof Brian Ripley
Prof Brian Ripley <ripley@stats.ox.ac.uk>
Wed, 8 Mar 2000 10:16:30 +0000 (GMT)
> From: "Jens Oehlschlägel-Akiyoshi" <jens.oehlschlaegel-akiyoshi@mdfactory.de>
> Date: Wed, 8 Mar 2000 10:16:39 +0100
>
> Here is a possible BUG with as.data.frame() and/or [.data.frame which broke
> Michael Lapsleys RODBC-Code.
> Can anyone confirm it is a bug or a 'feature' of the prototype?
It's the same in S-PLUS 3.4, but different in 2000 and 5.1. In short,
it seems a bug in Svr3 that have been fixed since in S-PLUS, but
one could argue that it is intentional.
> tablename <- "abc"
> a <- as.data.frame(cbind("abc", 1:3))
> b <- as.data.frame(cbind(tablename, 1:3))
>
> # ok
> > a
> V1 V2
> 1 abc 1
> 2 abc 2
> 3 abc 3
>
> # missing column name
> > b
> tablename
> 1 abc 1
> 2 abc 2
> 3 abc 3
It's empty not missing.
> names(b)
[1] "tablename" ""
Here 2000 and 5.1 give
tablename X.2
1 abc 1
2 abc 2
3 abc 3
There's an easy fix here:
as.data.frame.matrix can fixed by adding the two lines after
collabs <- dn[[2]]
if(any(empty <- nchar(collabs)==0))
collabs[empty] <- paste("V", 1:ncols, sep = "")[empty]
I am inclined to regard this as a reported bug, and fix it in R-release.
I am not sure I know what the optional argument in as.data.frame.matrix is
supposed to do: it seems documented nowhere. On the other hand, the
behaviour has been there for a long time undetected (in R).
> # subsetting ok
> > b[1,1]
> [1] abc
> Levels: abc
>
> # subsetting fails
> > b[1,2]
> Error in [.data.frame(b, 1, 2) : undefined columns selected
That appears to be deliberate: you cannot select unnamed columns.
As for the original code that triggers the problem:
in sqlSave() in RODBC
newname <- as.data.frame(cbind(NA, NA, tablename, as.matrix(names(dat)),
12, "varchar", 255, 255, NA, NA, 1, NA))
it is almost always a good idea to name the arguments to cbind.
--
Brian D. Ripley, ripley@stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272860 (secr)
Oxford OX1 3TG, UK Fax: +44 1865 272595
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._