# Re: [Rd] 0/1 vector for indexing leads to funny behaviour (PR#8389) (maybe a documentation deficiency?)

From: Tony Plate <tplate_at_acm.org>
Date: Wed 14 Dec 2005 - 17:39:24 GMT

I appreciate the explanation that some details should not appear in the help pages or the Introduction to R manual.

However, I am puzzled by this part of Prof Ripley's response:

```TP> [...] "An Introduction to R" [...] says this about
TP> numeric indices:
TP>     2. A vector of positive integral quantities. In
TP>        this case the values in the index vector must
TP>        lie in the set {1, 2, . . . , length(x)}
TP> (This seems to commit the sin of not telling the whole truth.)

```

BDR> No. Zero is not a positive integer.

That's what I was trying to say: the whole truth is that numeric index vectors that contain positive integral quantities can also contain zeros. Upon rereading this passage yet again, I think it is more misleading than merely incomplete: the phrasings "positive integral quantities", and "*must* lie in the set ..." rule out the possibility of the vector containing zeros.

In this Section 2.7 in "An Introduction to R", the four types of index vectors are introduced with "Such index vectors can be any of four distinct types:". There is not even a hint that other types of index vectors can be used (e.g., positive integral quantities and zeros). Is this really correct and helpful? (The only way that I can see that this section can be interpreted as correct is to claim that that the phrasing "can be any of four distinct types" permits the existence of other types that are neither described nor hinted at. However, this interpretation feels more clever than helpful.)

Tony Plate

Prof Brian Ripley wrote:

```> ?"[" says
>
>
>      'list', 'array', 'matrix'.
>
>      '[.data.frame' and '[.factor' for the behaviour when applied to
>      data.frame and factors.
>
>      'Syntax' for operator precedence, and the _R Language_ reference
>
> and the `indexing details' are indeed where it says they are.
>
> This is not an introductory topic, and it makes sense to have the
> details in only one place and refer to it.  That help page is already
>
>
> On Tue, 13 Dec 2005, Tony Plate wrote:
>
```

>> Yes, 0/1 (numeric) are intended to be used as index vectors -- and they
>> have the semantics of numeric indices, which is that 0 elements in the
>> index are omitted from the result. This can be a very useful mode of
>> operation in many situations.
>>
>> I was going to write "This is described in both the introduction to R,
>> and in the documentation for '['", except that I checked before I wrote
>> and was surprised to be unable to any discussion of zeros in indexing in
>> any of the first three places I looked:
>>
>> (1) help page for '[' (There is discussion of zero indices here, but
>> only in the context of using matrices to index matrices, not in the
>> context of ordinary vector indices).
>>
>> (2) Section 2.7 "Index vectors: selecting and modifying subsets of a
>> data set" in "An Introduction to R", which does say this about numeric
>> indices:
>> 2. A vector of positive integral quantities. In
>> this case the values in the index vector must
>> lie in the set {1, 2, . . . , length(x)}
>> (This seems to commit the sin of not telling the whole truth.)
```>
>
> No. Zero is not a positive integer.
>
```

>> (3) Section 5.5 "Array Indexing. Subsections of an array" (In "An
>> Introduction to R")
>>
>> Question for others: did I miss something obvious, or is this a
>> documentation deficiency that zeros in indices are not discussed in 3 of
>> some obvious first places to look?
>>
>> If indeed this is a documentation deficiency, I'm happy to contribute
>> documentation patch, but I await other opinions before spending any time
>> on that.
>>
>> -- Tony Plate
>>
>> rasche@molgen.mpg.de wrote:
>>
>>> Full_Name: Axel Rasche
>>> Version: 2.2.0
>>> OS: Linux
>>> Submission from: (NULL) (141.14.21.81)
>>>
>>>
>>> Dear Debuggers,
>>>
>>> This is not a serious problem. Are 0/1 vectors intended to be used as
>>> index
>>> vectors? If yes, there is a bug. If not, it leads just to some funny
>>> behaviour
>>> rather than an error message.
>>>
>>> In the appendix is some simple code to reproduce the problem. A
>>> logical vector
>>> as.logic(a) helps by indexing the vector b. The 0/1 vector a just
>>> returns the
>>> first value "a". But as many times as there is a 1 in a.
>>>
>>> Best regards,
>>> Axel
>>>
>>>
>>> Appendix:
>>>
>>> b = c("a","b","c","d")
>>> a = c(0,1,1,0)
>>> b[as.logical(a)]
>>> b[a]
>>> a = c(1,0,1,0)
>>> b[as.logical(a)]
>>> b[a]
>>> a = c(0,1,1,1)
>>> b[as.logical(a)]
>>> b[a]
>>>
>>> ______________________________________________
>>> R-devel@r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>>
>> ______________________________________________
>> R-devel@r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>
>

R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Thu Dec 15 04:43:38 2005

This archive was generated by hypermail 2.1.8 : Mon 20 Feb 2006 - 03:21:35 GMT