# Re: [R] newbie:looking for an efficient way to compute distance vector

From: Benilton Carvalho <bcarvalh_at_jhsph.edu>
Date: Wed, 23 Jan 2008 11:54:53 -0500

z <- outer(x, x, "-")
(abs(z)>step)*outer(1:length(x), 1:length(x))*z

(not tested)

b

>
> dear experts,
>
> I am new to R and am trying to compute a vector y from a vector x
> where :
> y[i] = sign(x[j]-x[i])*(j-i) with j the first index after i where
> abs(x[j]-x[i]) > to a given step
> y[i] is 0 if there is no such j
>
> I can write this in R as follows
> for(i in 1:length(x)) {
> y[i]=0
> for(j in i:length(x)) {
> if (abs(x[j]-x[i]) > step) {
> y[i]=sign(x[j]-x[i])*(j-i)
> break;
> }
> }
> }
>
> but I wonder if there is a more efficient way to write this. I
> understand
> explicit looping can often be avoided in R using vector notation.
>
> --
> View this message in context: http://www.nabble.com/newbie%3Alooking-for-an-efficient-way-to-compute-distance-vector-tp15045583p15045583.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help_at_r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help