[R] If Statement

William Dunlap wdunlap at tibco.com
Tue Mar 8 18:06:27 CET 2011


> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of dpender
> Sent: Tuesday, March 08, 2011 4:07 AM
> To: r-help at r-project.org
> Subject: [R] If Statement
> 
> Hi,
> 
> I am having some problems using the if statement correctly.  
> I have used it
> many times previously so I dona't know what is different with 
> this case. 
> Here is my problem:
> 
> I have a 1X10 matrix of values as follows:
> 
> > H.MC
>           [,1]
>  [1,] 4.257669
>  [2,] 7.023242
>  [3,] 4.949857
>  [4,] 5.107000
>  [5,] 4.257669
>  [6,] 4.257669
>  [7,] 4.257669
>  [8,] 4.257669
>  [9,] 4.257669
> [10,] 4.257669
> 
> What I want to do is replace all the values if 4.257669 with 
> a random number
> between 3 and 4.5.  To do this I have:
> 
> H.MC.fin <- matrix(0,10,1)
> 
> for (j in 1:10) {
> 
> if(H.MC[j] == 4.257669) H.MC.fin[j] <-runif(1,3,4.5) else 
> H.MC.fin[j] <-
> H.MC[j] 
> 
> }

Your for loop can be replaced by:
   whichToReplace <- H.MC == 4.257669
   H.MC.fin <- H.MC # copy the whole thing
   # then replace some values in the copy
   H.MC.fin[whichToReplace] <- runif(sum(whichToReplace), 3, 45)
whichToReplace will be a logical vector the length of H.MC,
with a TRUE value at the positions to be replaced.  Summing a
logical vector gives the number of TRUE's in it.

Others have pointed out that the initial test would be better
done by something like
   whichToReplace <- abs(H.MC - 4.257669) < 0.00001
instead of demanding exact equality.

If there might be NA's in H.MC, following the test with
   whichToReplace <- !is.na(whichToReplace) & whichToReplace

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com  

> This doesn't seem to do anything and H.MC.fin is the same as H.MC.
> 
> Does anyone know what I am doing wrong?
> 
> Thanks,
> 
> Doug
> 
> 
> --
> View this message in context: 
> http://r.789695.n4.nabble.com/If-Statement-tp3341167p3341167.html
> Sent from the R help mailing list archive at Nabble.com.
> 
> ______________________________________________
> R-help at r-project.org mailing list
> 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.
> 



More information about the R-help mailing list