On 31/01/2009 7:31 AM, Andrew Piskorski wrote:
This (tangential) discussion really should be a separate thread so I
changed the subject line above.
On Fri, Jan 30, 2009 at 11:51:00AM -0500, Simon Urbanek wrote:
Subject: Re: [Rd] (PR#13487) Segfault when mistakenly calling [.data.frame
My boss was debugging an issue in our R code. We have our own "[...."
functions, because stock R drops names when subscripting.
... if you tell it to do so, yes. If you tell it to not do that, it
won't ... ever tried drop=FALSE ?
Simon, no, the drop=FALSE argument has nothing to do with what
Christian was talking about. The kind of thing he meant is PR# 8192,
"Subject: [ subscripting sometimes loses names":
http://bugs.r-project.org/cgi-bin/R/wishlist?id=8192
In that bug report you were asked to provide simple examples, and you
didn't. I imagine that's why there was no action on it. It is not that
easy for someone else to actually find the simple example that led you
to print
$vec.1
BAD $vec.1[[1]] $vec.1[[2]]
a c <NA> a c no
1 3 NA 1 3 NA
I just tracked this one down, and can put together this simple example:
> (1:3)["no"]
[1] NA
where I think you would want the name "no" attached to the output. (Or
maybe your more complicated example is wanted? You don't explain.) But
that looks like documented behaviour to me: according to my reading of
"Indexing by vectors" in the R Language Definition manual, it should
give the same answer as (1:3)[4], and it does. So it's not a bug, but a
wishlist item.
And the other two cases where you list "BAD" behaviour? I didn't track
them down.
I know you spent a lot of time putting together that bug report; it
seems a shame that it is being ignored because you put in too much: you
really should simplify it as you were asked to do.
Duncan Murdoch
In R, subscripting with "[" USUALLY retains names, but R has various
edge cases where it (IMNSHO) inappropriately discards them. This
occurs with both .Primitive("[") and "[.data.frame". This has been
known for years, but I have not yet tried digging into R's
implementation to see where and how the names are actually getting
lost.
Incidentally, versions of S-Plus since approximately S-Plus 6.0 back
in 2001 show similar buggy edge case behavior. Older versions of
S-Plus, c. S-Plus 3.3 and earlier, had the correct, name preserving
behavior. I presume that the original Bell Labs S had correct
name-preserving behavior, and then the S-Plus developers broke it
sometime along the way.
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel