[Rd] Is this a bug in `[`?

Rui Barradas ruipb@rr@d@@ @ending from @@po@pt
Sun Aug 5 07:57:38 CEST 2018


Thanks.
This is exactly the doubt I had.

Rui Barradas

Às 05:26 de 05/08/2018, Kenny Bell escreveu:
> This should more clearly illustrate the issue:
> 
> c(1, 2, 3, 4)[-seq_len(4)]
> #> numeric(0)
> c(1, 2, 3, 4)[-seq_len(3)]
> #> [1] 4
> c(1, 2, 3, 4)[-seq_len(2)]
> #> [1] 3 4
> c(1, 2, 3, 4)[-seq_len(1)]
> #> [1] 2 3 4
> c(1, 2, 3, 4)[-seq_len(0)]
> #> numeric(0)
> Created on 2018-08-05 by the reprex package (v0.2.0.9000).
> 
> On Sun, Aug 5, 2018 at 3:58 AM Rui Barradas <ruipbarradas using sapo.pt 
> <mailto:ruipbarradas using sapo.pt>> wrote:
> 
> 
> 
>     Às 15:51 de 04/08/2018, Iñaki Úcar escreveu:
>      > El sáb., 4 ago. 2018 a las 15:32, Rui Barradas
>      > (<ruipbarradas using sapo.pt <mailto:ruipbarradas using sapo.pt>>) escribió:
>      >>
>      >> Hello,
>      >>
>      >> Maybe I am not understanding how negative indexing works but
>      >>
>      >> 1) This is right.
>      >>
>      >> (1:10)[-1]
>      >> #[1]  2  3  4  5  6  7  8  9 10
>      >>
>      >> 2) Are these right? They are at least surprising to me.
>      >>
>      >> (1:10)[-0]
>      >> #integer(0)
>      >>
>      >> (1:10)[-seq_len(0)]
>      >> #integer(0)
>      >>
>      >>
>      >> It was the last example that made me ask, seq_len(0) whould avoid an
>      >> if/else or something similar.
>      >
>      > I think it's ok, because there is no negative zero integer, so -0
>     is 0.
> 
>     Ok, this makes sense, I should have thought about that.
> 
>      >
>      > 1.0/-0L # Inf
>      > 1.0/-0.0 # - Inf
>      >
>      > And the same can be said for integer(0), which is the result of
>      > seq_len(0): there is no negative empty integer.
> 
>     I'm not completely convinced about this one, though.
>     I would expect -seq_len(n) to remove the first n elements from the
>     vector, therefore, when n == 0, it would remove none.
> 
>     And integer(0) is not the same as 0.
> 
>     (1:10)[-0] == (1:10)[0] == integer(0) # empty
> 
>     (1:10)[-seq_len(0)] == (1:10)[-integer(0)]
> 
> 
>     And I have just reminded myself to run
> 
>     identical(-integer(0), integer(0))
> 
>     It returns TRUE so my intuition is wrong, R is right.
>     End of story.
> 
>     Thanks for the help,
> 
>     Rui Barradas
> 
>      >
>      > Iñaki
>      >
>      >>
>      >>
>      >> Thanks in advance,
>      >>
>      >> Rui Barradas
>      >>
>      >> ______________________________________________
>      >> R-devel using r-project.org <mailto:R-devel using r-project.org> mailing list
>      >> https://stat.ethz.ch/mailman/listinfo/r-devel
> 
>     ______________________________________________
>     R-devel using r-project.org <mailto:R-devel using r-project.org> mailing list
>     https://stat.ethz.ch/mailman/listinfo/r-devel
>



More information about the R-devel mailing list