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 > > I found a solution in term of: > sapply(a,function(x) if (is(s.na)) NA else if (x<0) (-1)/2^x else 2^x) > but still I would like to understand why the solution above did not > work. I think is more ellegant.
What do you think the NA value in > a > 0 [1] NA TRUE TRUE TRUE FALSE FALSE FALSE means? Should you replace a[1] or not? You are saying you don't know, so what is R to do? It tells you to make up your mind. Try ind <- !is.na(a) & a > 0 a[ind] <- 2^a[ind] ind <- !is.na(a) & a < 0 a[ind] <- (-1)/2^a[ind] or use ifelse as in ifelse(a > 0, 2^a, -1/2^a) which is a lot more elegant. -- Brian D. Ripley, [EMAIL PROTECTED] 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 ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html