Re: [R] Turning a logical vector into its indices without losing its length

2007-08-24 Thread Gabor Grothendieck
On 8/24/07, Gabor Grothendieck <[EMAIL PROTECTED]> wrote:
> On 8/24/07, Gabor Grothendieck <[EMAIL PROTECTED]> wrote:
> > Here are two solutions:
> >
> > > logvec <- c(TRUE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE)
> >
> > > ifelse(logvec, seq_along(logvec), 0)
> > [1] 1 0 0 4 0 0 7 0
> >
> > > replace(logvec * 0, logvec, which(logvec))
> > [1] 1 0 0 4 0 0 7 0
>
> Actually the * 0 is not needed.  The last one could simply be:
>
> replace(logvec, logvec, which(logvec))

If logvec can have NAs then this solution would not work but could
be modified to be done like this:

replace(logvec, which(logvec), which(logvec))

__
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
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Turning a logical vector into its indices without losing its length

2007-08-24 Thread François Pinard
[Leeds, Mark (IED)]

>I have the code below which gives me what I want for temp based on
>invec but I was wondering if there was a shorter way ( i.e :
>a one liner ) without having to initialize temp to zeros.  This is
>ppurely for learning purposes. Thanks.

>invec <- c(TRUE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE)

>temp<-numeric(length(invec))
>temp[invec]<-which(invec)
>temp

>[1] 1 0 0 4 0 0 7 0

A mere:

   invec * seq_along(invec)

would do it.  To be honest, I dislike the multiplication trickery, and 
so prefer Gabor's solution, even if a bit longer:

   ifelse(invec, seq_along(invec), 0)

-- 
François Pinard   http://pinard.progiciels-bpi.ca

__
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
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Turning a logical vector into its indices without losing its length

2007-08-24 Thread Gabor Grothendieck
On 8/24/07, Gabor Grothendieck <[EMAIL PROTECTED]> wrote:
> Here are two solutions:
>
> > logvec <- c(TRUE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE)
>
> > ifelse(logvec, seq_along(logvec), 0)
> [1] 1 0 0 4 0 0 7 0
>
> > replace(logvec * 0, logvec, which(logvec))
> [1] 1 0 0 4 0 0 7 0

Actually the * 0 is not needed.  The last one could simply be:

replace(logvec, logvec, which(logvec))


>
>
> On 8/24/07, Leeds, Mark (IED) <[EMAIL PROTECTED]> wrote:
> > I have the code below which gives me what I want for temp based on
> > logvec but I was wondering if there was a shorter way ( i.e :
> > a one liner ) without having to initialize temp to zeros.  This is
> > purely for learning purposes. Thanks.
> >
> > logvec <- c(TRUE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE)
> >
> > temp<-numeric(length(invec))
> > temp[invec]<-which(invec)
> > temp
> >
> > [1] 1 0 0 4 0 0 7 0
> >
> > obviously, the code below doesn't work.
> >
> > temp <- which(invec)
> > > temp
> > [1] 1 4 7
> > 
> >
> > This is not an offer (or solicitation of an offer) to buy/se...{{dropped}}
> >
> > __
> > 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
> > and provide commented, minimal, self-contained, reproducible code.
> >
>

__
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
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Turning a logical vector into its indices without losing its length

2007-08-24 Thread Gabor Grothendieck
Here are two solutions:

> logvec <- c(TRUE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE)

> ifelse(logvec, seq_along(logvec), 0)
[1] 1 0 0 4 0 0 7 0

> replace(logvec * 0, logvec, which(logvec))
[1] 1 0 0 4 0 0 7 0


On 8/24/07, Leeds, Mark (IED) <[EMAIL PROTECTED]> wrote:
> I have the code below which gives me what I want for temp based on
> logvec but I was wondering if there was a shorter way ( i.e :
> a one liner ) without having to initialize temp to zeros.  This is
> purely for learning purposes. Thanks.
>
> logvec <- c(TRUE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE)
>
> temp<-numeric(length(invec))
> temp[invec]<-which(invec)
> temp
>
> [1] 1 0 0 4 0 0 7 0
>
> obviously, the code below doesn't work.
>
> temp <- which(invec)
> > temp
> [1] 1 4 7
> 
>
> This is not an offer (or solicitation of an offer) to buy/se...{{dropped}}
>
> __
> 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
> and provide commented, minimal, self-contained, reproducible code.
>

__
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
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Turning a logical vector into its indices without losing its length

2007-08-24 Thread Achim Zeileis
On Fri, 24 Aug 2007, Leeds, Mark (IED) wrote:

> I have the code below which gives me what I want for temp based on
> logvec but I was wondering if there was a shorter way ( i.e :
> a one liner ) without having to initialize temp to zeros.  This is
> purely for learning purposes. Thanks.
>
> logvec <- c(TRUE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE)

R> logvec[logvec] <- which(logvec)
R> logvec
[1] 1 0 0 4 0 0 7 0

hth,
Z

> temp<-numeric(length(invec))
> temp[invec]<-which(invec)
> temp
>
> [1] 1 0 0 4 0 0 7 0
>
> obviously, the code below doesn't work.
>
> temp <- which(invec)
> > temp
> [1] 1 4 7
> 
>
> This is not an offer (or solicitation of an offer) to buy/se...{{dropped}}
>
> __
> 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
> and provide commented, minimal, self-contained, reproducible code.
>
>

__
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
and provide commented, minimal, self-contained, reproducible code.


[R] Turning a logical vector into its indices without losing its length

2007-08-24 Thread Leeds, Mark \(IED\)
I have the code below which gives me what I want for temp based on
logvec but I was wondering if there was a shorter way ( i.e :
a one liner ) without having to initialize temp to zeros.  This is
purely for learning purposes. Thanks.

logvec <- c(TRUE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE)

temp<-numeric(length(invec))
temp[invec]<-which(invec)
temp

[1] 1 0 0 4 0 0 7 0

obviously, the code below doesn't work.

temp <- which(invec)
> temp
[1] 1 4 7


This is not an offer (or solicitation of an offer) to buy/se...{{dropped}}

__
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
and provide commented, minimal, self-contained, reproducible code.