Re: [Rd] (PR#8192) [ subscripting sometimes loses names

From: Duncan Murdoch <>
Date: Sat, 31 Jan 2009 09:04:58 -0500

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":

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

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.
> mailing list Received on Sat 31 Jan 2009 - 14:48:00 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Sat 31 Jan 2009 - 16:30:17 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.

list of date sections of archive