# We compare the implemented algorithm against a naive brute-force approach.
bruteForceRM <- function(x, y) {
n <- length(x)
medind1 <- floor((n+2) / 2)
medind2 <- floor((n+1) / 2)
temp <- t(sapply(1:n, function(z) sort(apply(cbind(x, y), 1 ,
function(k) (k[2] - y[z]) /
(k[1] - x[z])))))
RMslope <- sort(temp[, medind2])[medind1]
RMintercept <- sort(y - x * RMslope)[medind1]
return(list(intercept = RMintercept, slope = RMslope))
}
n = 100
set.seed(2)
x = rnorm(n)
y = x + rnorm(n)
t0 <- proc.time()
RM.fast <- RepeatedMedian(x, y, NULL, NULL, FALSE)
t1 <- proc.time()
t1 - t0
t0 <- proc.time()
RM.naive <- bruteForceRM(x, y)
t1 <- proc.time()
t1 - t0
RM.fast$slope - RM.naive$slope
Run the code above in your browser using DataLab