user2280549
user2280549

Reputation: 1234

Vectorization of findInterval()

I have following problem with R function findInterval()

Given a vector X and a matrix Y, I want to find in which interval lie elements of X. Intervals are constructed, having breakpoints in Y rows. In other words for X = c(2,3) and Y = matrix(c(3,1,4,2,5,4),2,3), the output would be c(0,2). I wrote following code:

X <- c(2,3)
Y <- matrix(c(3,1,4,2,5,4),2,3)

output <- diag(apply(Y,1,function(z)findInterval(X,z)))

and it works. However, I think, it can be optimised, since the apply function returns 2 x 2 matrix (that's why i had to get diagonal of that). Is there a way to do the same, but using function, which will return a vector, taking as an argument my vector X and matrix Y? I perform this operation on high-demensional vectors, so obtaining unnecessary matrixes size 10000 x 10000 is not a good idea imho. To maximize efficiency, I don't want to use loops.

Thanks in advance for any feedback.

Upvotes: 2

Views: 660

Answers (1)

flodel
flodel

Reputation: 89097

You can do

rowSums(X > Y)
# [1] 0 2

Upvotes: 2

Related Questions