[R] Fastest way of finding if any members of vector x fall in the range of the rows of matrix y

Dimitris Rizopoulos d.rizopoulos at erasmusmc.nl
Sat Jun 25 10:13:04 CEST 2011


yet another solution is:

v <- c(1, 2, 6, 5)
w <- matrix(c(1, 4, 3, 5, 8, 10), ncol = 2, byrow = TRUE)

check <- outer(w[, 1], v, "-") * outer(w[, 2], v, "-")
v[which(check <= 0, arr.ind = TRUE)[, 2]]


Best,
Dimitris


On 6/24/2011 10:05 PM, Martin Morgan wrote:
> On 06/24/2011 11:12 AM, Dennis Murphy wrote:
>> Hi:
>>
>> Not much different from Peter's approach, but here's another try:
>>
>> v<- c(1, 2, 6, 5)
>> w<- matrix(c(1, 4, 3, 5, 8, 10), ncol = 2, byrow = TRUE)
>>> w
>> [,1] [,2]
>> [1,] 1 4
>> [2,] 3 5
>> [3,] 8 10
>>
>>
>> f<- function(x) v[which(v>= x[1]& v<= x[2])]
>> unlist(apply(w, 1, f))
>> [1] 1 2 5
>>
>> If you just do the apply() part, the function will return a list of
>> those elements of v that fall within the i-th interval.
>
> Maybe
>
>  > v = c(1, 2, 6, 5)
>  > start = c(-Inf, 1, 3, 8)
>  > end = c(-Inf, 4, 5, 10)
>  > v[ v <= end[findInterval(v, start)] ]
>
> Also IRanges::findOverlaps / countOverlaps in Bioconductor
>
> v[countOverlaps(IRanges(v, v), IRanges(start, end)) != 0]
>
> http://bioconductor.org/install
>
> Martin
>
>>
>> HTH,
>> Dennis
>>
>> On Fri, Jun 24, 2011 at 9:52 AM, Salih Tuna<salihtuna at gmail.com> wrote:
>>> Hi guys,
>>>
>>> let's assume i have the following
>>>
>>> 1
>>> x = 2
>>> 6
>>> 5
>>>
>>> 1 4
>>> y = 3 5
>>> 8 10
>>>
>>> i want the code to report back 1, 2 and 5 from x.
>>> Basically it shopuld check whether each elements of x falls in the
>>> range of
>>> each row of x. 1 and 2 falls in between 1-4 and 5 falls in between 3-5.
>>> I do this with two for loops but in the case of very large list, it
>>> takes
>>> ages.
>>>
>>> best,
>>> salih
>>>
>>>
>>> On Fri, Jun 24, 2011 at 4:12 PM, Dennis Murphy<djmuser at gmail.com> wrote:
>>>>
>>>> Hi:
>>>>
>>>> That leaves open several possibilities. Could you please supply a
>>>> small, reproducible example (i.e., one that someone can copy and paste
>>>> into an R session) that illustrates the problem along with the
>>>> solution you expect?
>>>>
>>>> TIA,
>>>> Dennis
>>>>
>>>> On Fri, Jun 24, 2011 at 2:30 AM, Salih Tuna<salihtuna at gmail.com> wrote:
>>>>> Hi Dimitris,
>>>>> Thanks for your reply. But this is not exactly what i am after. I want
>>>>> to
>>>>> find the probes that falls into certain regions. In your solution it
>>>>> will
>>>>> ignore the second probe if it falls into the same region as the first
>>>>> one.
>>>>> Is there any vector trickb uilt in R to find whether probes fall into
>>>>> certain regions?
>>>>> best,
>>>>> salih
>>>>>
>>>>> On Fri, Jun 24, 2011 at 10:23 AM, Dimitris Rizopoulos<
>>>>> d.rizopoulos at erasmusmc.nl> wrote:
>>>>>
>>>>>> One approach is the following:
>>>>>>
>>>>>> x<- rnorm(5)
>>>>>> y<- matrix(rnorm(5*2), 5, 2)
>>>>>>
>>>>>> check<- y - x
>>>>>> check[, 1] * check[, 2]< 0
>>>>>>
>>>>>>
>>>>>> I hope it helps.
>>>>>>
>>>>>> Best,
>>>>>> Dimitris
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 6/24/2011 10:57 AM, Salih Tuna wrote:
>>>>>>
>>>>>>> Hi All,
>>>>>>> What is the fastest way of finding if any members of vector x
>>>>>>> fall in
>>>>>>> the
>>>>>>> range of the rows of matrix y?
>>>>>>> I do not want to use two for loops as this will take forever.
>>>>>>> Any help will be appreciated,
>>>>>>> best,
>>>>>>> salih
>>>>>>>
>>>>>>> [[alternative HTML version deleted]]
>>>>>>>
>>>>>>> ______________________________**________________
>>>>>>> R-help at r-project.org mailing list
>>>>>>>
>>>>>>> https://stat.ethz.ch/mailman/**listinfo/r-help<https://stat.ethz.ch/mailman/listinfo/r-help>
>>>>>>>
>>>>>>> PLEASE do read the posting guide http://www.R-project.org/**
>>>>>>> posting-guide.html<http://www.r-project.org/posting-guide.html>
>>>>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>>>>
>>>>>>>
>>>>>> --
>>>>>> Dimitris Rizopoulos
>>>>>> Assistant Professor
>>>>>> Department of Biostatistics
>>>>>> Erasmus University Medical Center
>>>>>>
>>>>>> Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
>>>>>> Tel: +31/(0)10/7043478
>>>>>> Fax: +31/(0)10/7043014
>>>>>> Web:
>>>>>> http://www.erasmusmc.nl/**biostatistiek/<http://www.erasmusmc.nl/biostatistiek/>
>>>>>>
>>>>>>
>>>>>
>>>>> [[alternative HTML version deleted]]
>>>>>
>>>>> ______________________________________________
>>>>> 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.
>
>

-- 
Dimitris Rizopoulos
Assistant Professor
Department of Biostatistics
Erasmus University Medical Center

Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
Tel: +31/(0)10/7043478
Fax: +31/(0)10/7043014
Web: http://www.erasmusmc.nl/biostatistiek/



More information about the R-help mailing list