Splus 8.2.0 (c. 2010) and Splus6.0 (c. 2001) act like R in this respect.
  x <- c(10.0, 11.0, 12.0)
  i <- c(FALSE,TRUE,FALSE,FALSE,TRUE)
  x[i]
  #[1] 11 NA
  x[i] <- 1:2
  x
  #[1] 10  1 12 NA  2
I no longer have access to a running version of Splus 3.4, but it does not
look like a feature we would have changed.

Bill Dunlap
TIBCO Software
wdunlap tibco.com


On Sat, Sep 12, 2015 at 9:17 AM, Suharto Anggono Suharto Anggono via
R-help <r-help@r-project.org> wrote:
> I'll make my points clearer.
>
> - The case of logical index vector longer than the original vector is not 
> usual case for me. As I said, I encountered it in the code of function 'rank' 
> in R.
>
> - Before, I have read "S-PLUS help" (version 3.4, it seems), 
> http://www.uni-muenster.de/ZIV.BennoSueselbeck/s-html/helpfiles/Subscript.html.
>  The following is the relevant part. There are missing pieces there that I 
> fill by guessing.
>
> Vector subscripts are generated with when i and x are both vectors. (....) 
> The result of the expression is to extract or replace elements of x 
> corresponding to a vector of positive indices computed according to the value 
> of i.
>
> .... If i is logical the indices are produced by starting at 1 and selecting 
> the numbers for which the corresponding element is T. If is shorter than it 
> is extended by cyclic repetition. It can be longer than as well, with no 
> change in the computation of indices. ....
>
> ....
>
> For replacements, x[i] <- value the rule is that the length of will be set to 
> the largest value in the indices, if that is bigger than the current length 
> of x. ....
>
>
> >From it, I infer that, if i is logical and length(i) >= length(x), x[i] <- 
> >value has the same effect to x[which(i)] <- value, where which(i) takes 
> >indices where i is T.
>
> - In R, if i is logical and length(i) > length(x), length(x) after x[i] <- 
> value may be different from after x[which(i)] <- value.
>
> - So, I wonder if R inherits the behavior from S or not.
>
> - The behavior is not clearly documented in R. I just find "R Language 
> Definition", "3.4.1 Indexing by vectors", that can be interpreted to imply 
> the behavior.
>
> - However, for a particular case, function 'rank' in R relies on the behavior.
>
> However, it seems that relying on the behavior is not on purpose. Previously, 
> at least until R 3.1.3, the code of function 'rank' has the following before 
> yy <- NA .
>         yy <- integer(length(x))
>         storage.mode(yy) <- storage.mode(y)
>
> It seems that yy[] <- NA is what is intended.
>
> - However, for me, the behavior is plausible. The assumption is that indices 
> from 1 to length(i) exist.
>
> --------------------------------------
>
> I think this behavior is consistent with typical indexing behaviour in R... I 
> would ask you what result you thought you should get? I, for one, can think 
> of all sorts of uses for numeric indexes that have different lengths than the 
> vector, but am stumped to think of any use for what you are proposing.
> ---------------------------------------------------------------------------
> Jeff Newmiller                        The     .....       .....  Go Live...
> DCN:<[hidden email]>        Basics: ##.#.       ##.#.  Live Go...
>                                       Live:   OO#.. Dead: OO#..  Playing
> Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
> /Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
> ---------------------------------------------------------------------------
> Sent from my phone. Please excuse my brevity.
>
> On September 5, 2015 10:02:05 AM PDT, Suharto Anggono Suharto Anggono via 
> R-help <[hidden email]> wrote:
>
>>I came across this behavior when I followed the code of function 'rank'
>>in R.
>>
>>It seems that subassignment of a vector by a logical index vector that
>>is longer than the original vector always results in expanding the
>>original vector to the length of the index vector.
>>
>>The resulting length may be different from the result of subassignment
>>by the equivalent numeric vector. For subassignment of a vector by a
>>numeric index vector, the original vector is expanded to the maximum
>>index, if it is larger than the length of the original vector.
>>
>>This is an example.
>>
>>> x <- NA
>>> x[c(FALSE,TRUE,FALSE)] <- 1
>>> x
>>[1] NA  1 NA
>>
>>Compare to this.
>>
>>> x <- NA
>>> x[which(c(FALSE,TRUE,FALSE))] <- 1
>>> x
>>[1] NA  1
>>
>>Does S exhibit the same behavior?
>>
>>Currently, if there is NA and na.last = "keep", function 'rank' in R
>>relies on this behavior to give correct result length.
>>
>>In "R Language Definition", "3.4.1 Indexing by vectors" says: "Logical.
>>The indexing i should generally have the same length as x. .... If it
>>is longer, then x is conceptually extended with NAs. ...." The
>>statement can be taught to support the observed behavior.
>>
>>> sessionInfo()
>>R version 3.2.2 (2015-08-14)
>>Platform: i386-w64-mingw32/i386 (32-bit)
>>Running under: Windows XP (build 2600) Service Pack 2
>>
>>locale:
>>[1] LC_COLLATE=English_United States.1252
>>[2] LC_CTYPE=English_United States.1252
>>[3] LC_MONETARY=English_United States.1252
>>[4] LC_NUMERIC=C
>>[5] LC_TIME=English_United States.1252
>>
>>attached base packages:
>>[1] stats     graphics  grDevices utils     datasets  methods   base
>>
>>______________________________________________
>>[hidden email] mailing list -- To UNSUBSCRIBE and more, see
>>https://stat.ethz.ch/mailman/listinfo/r-help
>>PLEASE do read the posting guide
>>http://www.R-project.org/posting-guide.html
>>and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to