[R] Subtracting elements of a vector from each other stepwise

Jeff Newmiller jdnewmil at dcn.davis.CA.us
Thu Sep 12 02:48:17 CEST 2013


It is worth asking for clarification sometimes, but I have to admit that I don't have much sympathy in this case because there isn't much code involved and typing in the code (or copy/pasting it line-by-line) and experimenting with it is crucial to the process of learning R. Picking out one expression at a time from each line and looking at the result with the str function is really how you have to do it. That is why responders on this list so often ask for reproducible examples from the questioner... the answer can be much more compact and quick to generate.
---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnewmil at dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                      Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
--------------------------------------------------------------------------- 
Sent from my phone. Please excuse my brevity.

Ben Harrison <harb at student.unimelb.edu.au> wrote:
>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 <bbolker at gmail.com>
>>> To: r-help at 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 at 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 at 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.



More information about the R-help mailing list