[R] Subsetting a vector using an index with all missing values

Bill Dunlap w||||@mwdun|@p @end|ng |rom gm@||@com
Sat Jul 2 07:01:44 CEST 2022


This has to do with the mode of the subscript - logical subscripts are
repeated to the length of x and integer/numeric ones are not.  NA is
logical, NA_integer_ is integer, so we get

> x <- 1:10
> x[ rep(NA_integer_, 3) ]
[1] NA NA NA
> x[ rep(NA, 3) ]
 [1] NA NA NA NA NA NA NA NA NA NA

-Bill


On Fri, Jul 1, 2022 at 8:31 PM Peter Langfelder <peter.langfelder using gmail.com>
wrote:

> Hi all,
>
> I stumbled on subsetting behavior that seems counterintuitive and
> perhaps is a bug. Here's a simple example:
>
> > x = 1:10
> > x[ rep(NA, 3)]
>  [1] NA NA NA NA NA NA NA NA NA NA
>
> I would have expected 3 NAs (the length of the index), not 10 (all
> values in x). Looked at the documentation for the subsetting operator
> `[` but found nothing indicating that if the index contains all
> missing data, the result is the entire vector.
>
> I can work around the issue for a general 'index' using a somewhat
> clunky but straightforward construct along the lines of
>
> > index = rep(NA, 3)
> > x[c(1, index)][-1]
> [1] NA NA NA
>
> but I'm wondering if the behaviour above is intended.
>
> Thanks,
>
> Peter
>
> ______________________________________________
> R-help using 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.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list