[R] FOR LOOP w/IFELSE statement help
(Ted Harding)
Ted.Harding at manchester.ac.uk
Thu Mar 6 00:45:07 CET 2008
On 05-Mar-08 23:37:42, zack holden wrote:
> Dear list,
> I'm trying to query a string of numbers to identify where in the string
> the numbers stop increasing (where x[i] == x[i+1]). In example 1 below,
> I've adapted code from Jim Holt to do this. However, I run into
> situations where the condition is not met, as in example 2, where the
> number string is continuous. In this case, I need to specify an
> alternative outcome, where if in the loop this condition isn't met, I
> default to the max. of the number string which.max(x).
>
> Can someone tell me how to add an additional statement to example 2,
> specifying that if in the loop, the
> condition isn't found, then to give the max of the string?
>
> Thanks in advance for any replies
>
>### Example 1 ################### start with test string
> xx <- c(3,4,5,5,6,7,8,9)
> result <- NULLx1 <- which.min(x)
> for(i in x1:(length(x)-1)){
> if((x[i] == x[i+1])) result <- c(result,x[i])
># start with min, result = where in string x[i]==x[i+1]}
>
>###Example 2 ####################################
> x <- c(3,4,5,6,7,8,9,10)
> result <- NULLx1 <- which.min(x)
> for(i in x1:(length(x)-1)){
> if((x[i] == x[i+1])) result <- c(result, x[i])
># condition not met; result = NULL}
I would rather do this in the following kind of way:
### Example 1:
xx <- c(3,4,5,5,6,7,8,9)
nn <- length(xx)
if(any(xx[1:(nn-1)]==xx[2:nn])){
min(which(xx[1:(nn-1)]==xx[2:nn]))
} else max(xx)
### Result: [1] 3
### Example 2:
x <- c(3,4,5,6,7,8,9,10)
n <- length(x)
if(any(x[1:(n-1)]==x[2:n])){
min(which(x[1:(n-1)]==x[2:n]))
} else max(x)
### Result: [1] 10
Best wishes,
Ted.
--------------------------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at manchester.ac.uk>
Fax-to-email: +44 (0)870 094 0861
Date: 05-Mar-08 Time: 23:45:05
------------------------------ XFMail ------------------------------
More information about the R-help
mailing list