[R] Help with for loop

David Winsemius dwinsemius at comcast.net
Mon Sep 14 23:32:33 CEST 2009


On Sep 14, 2009, at 5:14 PM, <edchen51 at gmail.com> <edchen51 at gmail.com>  
wrote:

> thank you all for your help. I do know how to use which() but my  
> problem is that I am writing a function in which this is just part  
> of it. After seeing the (a-b)[b<a], it gives the wrong index number  
> for which is negative and which is positive.

Can you explain what you mean? There are no index numbers. The  (a-b) 
[b<a] version skipped the generation of index numbers entirely and  
gives you the _values_ you had asked for. The expression b<a which  
would only be true when the difference is less than zero gets turned  
into a logical vector. This then is fed to the extract function for  
the vector (a-b) with logical indexing and only returns the positive  
values.

?"["

 > b<a
[1]  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE


> I am not sure why that is, but the which function does give the  
> correct index number. I guess what I want is to be able to save two  
> vectors of index and use them to reference the raw data base for  
> further calculation.

That was not at all clear from your posting. You said you wanted  
values 1,3,1. Perhaps:

negidx <- which(a<b)
posidx <- which(b<a)

datafrm[negidx, ]
datafrm[posidx, ]

> One vector for all the negative values and one for all the positive  
> ones.




>
> On Mon, Sep 14, 2009 at 4:16 PM, David Winsemius <dwinsemius at comcast.net 
> > wrote:
>
> On Sep 14, 2009, at 3:02 PM, Jorge Ivan Velez wrote:
>
> Hi Edward,
> Here is a suggestion:
>
> a = c(4,5,1,7,8,12,39)
> b = c(3,7,8,4,7,25,78)
> d <- a-b
> d[which(d>0)]
> # [1] 1 3 1
>
> #Or even:
>  d <- (a-b)[which((a-b)>0)]
>  d
> #[1] 1 3 1
>
>
>
> HTH,
> Jorge
>
>
> On Mon, Sep 14, 2009 at 2:50 PM, Edward Chen <edchen51 at gmail.com>  
> wrote:
>
> I have a code:
> *a = c(4,5,1,7,8,12,39)
> b = c(3,7,8,4,7,25,78)
> d =a-b
> for(i in 1:length(d)){
> if(d[i]>0){x = list(d[i])
> print(x)}
> else{y = list(d[i])
> print(y)}}
>
> the results are:
>
> [[1]]
> [1] 1
>
> [[1]]
> [1] -2
>
> [[1]]
> [1] -7
>
> [[1]]
> [1] 3
>
> [[1]]
> [1] 1
>
> [[1]]
> [1] -13
>
> [[1]]
> [1] -39
>
>
> which will tell me what d is. but is it possible to output the order  
> in
> which the difference is in the vector d?
> for example I would want to see x = 1,3,1 and they are from d[1],  
> d[4],
> d[5].
> This is just a crude example I thought of to help me do something more
> complicated.
>
> David Winsemius, MD
> Heritage Laboratories
> West Hartford, CT

David Winsemius, MD
Heritage Laboratories
West Hartford, CT




More information about the R-help mailing list