If I were Michael (OP) right now, I think my head would be spinning.

As a newbie myself, I know how hard it is to read R code for the first time, so could it also be part of the newsgroup etiquette to at least partially explain provided code to newbies?

I agree that the interactive help '?' is available and should be consulted, but it would also be helpful if those of you with great experience could add a little guidance for your code.

Excuse me if this is out-of-place.

Ben


On 11/09/13 09:48, Ben Bolker wrote:
On 13-09-10 06:24 PM, arun wrote:
Hi,
May be this also works:

  dist(x)
#   1  2  3
#2  2
#3  6  4
#4 12 10  6

as.matrix(dist(x))
#   1  2 3  4
#1  0  2 6 12
#2  2  0 4 10
#3  6  4 0  6
#4 12 10 6  0
which(dist(x)==min(dist(x)))
#[1] 1
A.K.

   Yes, but you need to set the diagonal to NA, or something -- the OP
doesn't want to include self-comparison. It also helps to use
arr.ind=TRUE in which().  You're right that dist() would be a hair more
efficient that outer(...), though




----- Original Message -----
From: Ben Bolker <bbol...@gmail.com>
To: r-h...@stat.math.ethz.ch
Cc:
Sent: Tuesday, September 10, 2013 5:39 PM
Subject: Re: [R] Subtracting elements of a vector from each other stepwise

arun <smartpink111 <at> yahoo.com> writes:


Hi,
Not sure this is what you wanted:

  sapply(seq_along(x), function(i) {x1<- x[i]; x2<- x[-i];
x3<-x2[which.min(abs(x1-x2))];c(x1,x3)})
#     [,1] [,2] [,3] [,4]
#[1,]   17   19   23   29
#[2,]   19   17   19   23
A.K.


   It's a little inefficient (because it constructs
the distances in both directions), but how about:

x = c(17,19,23,29)
d <- abs(outer(x,x,"-"))
diag(d) <- NA
d[lower.tri(d)] <- NA
which(d==min(d,na.rm=TRUE),arr.ind=TRUE)


?

----- Original Message -----
From: Michael Budnick <mbudnick08 <at> snet.net>
To: r-help <at> r-project.org
Cc:
Sent: Tuesday, September 10, 2013 4:06 PM
Subject: [R] Subtracting elements of a vector from each other stepwise

I am trying to figure out how to create a loop that will take the
difference of each member of a vector from each other and also spit out
which one has the least difference.

I do not want the vector member to subtract from itself or it must be able
to disregard the 0 obtained from subtracting from itself.

For example:

x = c(17,19,23,29)


[snip]

______________________________________________
R-help@r-project.org 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@r-project.org 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.

Reply via email to