which(vector1 < vector2) which(vector1 < vector2) r r

which(vector1 < vector2)


Try this:

vapply(1:6, function(i) max(which(x < i)), double(1))


A fully vectorized approach:

x <- c(1,3,1,4,2)y <- c(1,2,3,4,5,6)f <- function(x, y) {    xo <- sort(unique(x))    xi <- cummax(1 + length(x) - match(xo, rev(x)))    xi[cut(y, c(xo, Inf))]}f(x,y)# [1] NA  3  5  5  5  5

The advantages of full vectorization really start to kick in when both x and y are relatively long and each contains many distinct values:

x <- sample(1:1e4)y <- 1:1e4microbenchmark(nicola(), frank(), beauvel(), davida(), hallo(), josho(),times=5)Unit: milliseconds      expr        min         lq       mean     median        uq        max neval  cld  nicola() 4927.45918 4980.67901 5031.84199 4991.38240 5052.6861 5207.00330     5    d   frank()  513.05769  513.33547  552.29335  517.65783  540.9536  676.46221     5  b   beauvel() 1091.93823 1114.84647 1167.10033 1121.58251 1161.3828 1345.75158     5   c   davida()  562.71123  575.75352  585.83873  590.90048  597.0284  602.80002     5  b     hallo()  559.11618  574.60667  614.62914  624.19570  641.9639  673.26328     5  b     josho()   36.22829   36.57181   37.37892   37.52677   37.6373   38.93044     5 a   


Are you looking for this?

y<-1:6max.col(outer(y,x,">"),ties.method="last")*NA^(y<=min(x))#[1] NA  3  5  5  5  5