[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