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]
0/1 vector for indexing leads to funny behaviour (PR#8389)
8 messages · rasche@molgen.mpg.de, Peter Dalgaard, Tony Plate +3 more
rasche at molgen.mpg.de writes:
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.
Yes, that is completely as intended. Zeros in a numerical index vector produce nothing and ones produce the first element. The documentation could arguably be better on this point though.
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 at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
O__ ---- Peter Dalgaard ?ster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
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.)
(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 at 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 at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
The other place its discussed is in 3.4.1 of the R Language Definition: http://finzi.psych.upenn.edu/R/doc/manual/R-lang.html#Indexing-by-vectors
On 12/13/05, Tony Plate <tplate at acm.org> 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.)
(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 at 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 at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
?"[" says
See Also:
'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
manual about indexing details.
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 over-loaded.
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 at 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 at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Brian D. Ripley, ripley at 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 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595
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
See Also:
'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
manual about indexing details.
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
over-loaded.
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 at 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 at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Tony Plate <tplate at acm.org> writes:
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.
I wondered too. I suppose one interpretation is, No, it's not just not telling the whole truth, it's outright false! Alternatively, it could be that 2. is OK as written, but there needs to be entries for the nonnegative/nonpositive cases. Or - perish the thought - that Brian made a blunder...
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
See Also:
'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
manual about indexing details.
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
over-loaded.
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 at 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 at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
O__ ---- Peter Dalgaard ?ster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
On Wed, 14 Dec 2005, Tony Plate wrote:
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.
"Someone told me that you can't run without bouncing the ball in basketball. I got a basketball and tried it and it worked fine. He must be wrong" -- a comp.lang.c standard It doesn't rule out the the possibility of the vector containing zeros, it tells you that you should not put zeros in the vector. -thomas