[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.


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.


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 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:
 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.