Thank you for all your observations and comments!!
 
As you suggest, the option x <- x*c(rep(1,19), -1) is a more elegant and a fast 
way!
 
Frank S.
 
> From: dwinsem...@comcast.net
> Date: Thu, 18 Jun 2015 21:33:57 -0700
> To: marc_schwa...@me.com
> CC: r-help@r-project.org
> Subject: Re: [R] Sign of specific elements of a vector
> 
> 
> On Jun 18, 2015, at 1:21 PM, Marc Schwartz wrote:
> 
> > Just to augment Bert�s comment, other options are likely to introduce some 
> > level of overhead that while perhaps looking better, will not be materially 
> > faster. Depending upon the length of your vector, you could do some testing 
> > to see.
> > 
> 
> Another method which depends upon R recycling of vector arguments:
> 
> x <- x*c(rep(1,19), -1)
> 
> Might be a bit faster:
> 
> > set.seed(1)
> > x <- rnorm(1e6)
> > system.time(x <- x*c(rep(1,19), -1))
>    user  system elapsed 
>   0.005   0.000   0.005 
> > set.seed(1)
> > system.time({
> + IND <- seq(20,length(x), by=20)
> + x[IND] <- -x[IND]})
>    user  system elapsed 
>   0.010   0.001   0.011 
> 
> -- 
> David.
> 
> > One thing that might yield a little bit of performance improvement would be 
> > to pre-calculate the indices:
> > 
> > set.seed(1)
> > x <- rnorm(100)
> > IND <- seq(20,100, by=20)
> > 
> >> IND
> > [1]  20  40  60  80 100
> > 
> >> x[IND]
> > [1]  0.5939013  0.7631757 -0.1350546 -0.5895209 -0.4734006
> > 
> > x[IND] <- -x[IND]
> > 
> >> x[IND]
> > [1] -0.5939013 -0.7631757  0.1350546  0.5895209  0.4734006
> > 
> > 
> > But unless your vector is very large, I suspect the performance gain may be 
> > minimal in real time.
> > 
> > Regards,
> > 
> > Marc Schwartz
> > 
> > 
> >> On Jun 18, 2015, at 3:07 PM, Bert Gunter <bgunter.4...@gmail.com> wrote:
> >> 
> >> Your **is** the "coolest" and most efficient way to do this. It's
> >> vectorized -- apply() stuff is not.
> >> 
> >> Cheers,
> >> Bert
> >> 
> >> Bert Gunter
> >> 
> >> "Data is not information. Information is not knowledge. And knowledge is
> >> certainly not wisdom."
> >>  -- Clifford Stoll
> >> 
> >> On Thu, Jun 18, 2015 at 12:40 PM, Frank S. <f_j_...@hotmail.com> wrote:
> >> 
> >>> Hi everyone,
> >>> 
> >>> I have an "x" vector and I would want to change the sign every 20
> >>> elements. For this puspose,
> >>> I wrote the following code:
> >>> 
> >>> set.seed(1)
> >>> x <- rnorm(100)
> >>> x
> >>> x[seq(20,100, by=20)] <- -x[seq(20,100, by=20)]
> >>> x
> >>> 
> >>> However, I'm afraid  it is a rudimentary form to get the desired result.
> >>> II wonder wether there is a cool way to do so, that is, for example with
> >>> apply or sign function.
> >>> 
> >>> Thans in advanced for your help!
> >>> 
> >>> Frank S.
> > 
> > ______________________________________________
> > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > 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.
> 
> David Winsemius
> Alameda, CA, USA
> 
> ______________________________________________
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
                                          
        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.

Reply via email to