[R] different functions on different vector subsets

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu Nov 10 21:37:45 CET 2005


On Thu, 10 Nov 2005, Thomas Lumley wrote:

> On Thu, 10 Nov 2005, Ron Ophir wrote:
>
>> Hi,
>> I am trying to apply two different functions on on a vector as follow:
>> a<-c(NA,1,2,3,-3,-4,-6)
>> if a>0 I would like to raise it by the power of 2: 2^a and if the a<0 I
>> would like to have the inverse value, i.e., -1/2^a.
>> so I thought of doing it two steps:
>> a[a>0]<-2^[a>0]
>> a[a<0]<-(-1)/2^a[a<0]
>> I got the following error
>> Error: NAs are not allowed in subscripted assignments
>> any other ma>nupulation that I did with is.na() but did not succeed.
>> What is funny that the two sides of the assignment work and return the
>> same vector size:
>>> 2^a[a>0]
>> [1] NA  2  4  8
>>> a[a>0]
>> [1] NA  1  2  3
>
> The reason NAs are not allowed in subscripted assignments is based on
> numeric rather than logical subscripts.
>
> For numeric subscripts the problem is ambiguity about what the NA index
> should do (we know there is ambiguity because two parts of the R code did
> different things).  For logical subscripts you could argue that the
> ambiguity isn't present and that if the index was NA the element should
> just be set to NA. This change might be worth making.

That presumes NA is a valid value, but in general it is not. (Not for raw, 
not for lists, not for data frames, ....)  I don't think we want such 
inconsistent behaviour.

-- 
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




More information about the R-help mailing list