У меня есть матрица размером 10000 x 100 и вектор длиной 100. Я хотел бы применить настраиваемую функцию percentile, которая принимает аргумент вектора и скалярный аргумент, к каждому столбцу матрица такая, что на итерации j аргументы, используемые с процентилем, представляют собой столбец j матрицы и запись j вектора. Есть ли способ использовать для этого одну из функций apply?
Вот мой код. Он запускается, но не возвращает правильный результат.
percentile <- function(x, v){
length(x[x <= v]) / length(x)
}
X <- matrix(runif(10000 * 100), nrow = 10000, ncol = 100)
y <- runif(100)
result <- apply(X, 2, percentile, v = y)
Обходной путь, который я использовал, заключался в том, чтобы просто добавить y к X и переписать функцию процентиля, как показано ниже.
X <- rbind(X, y)
percentile2 <- function(x){
v <- x[length(x)]
x <- x[-length(x)]
length(x[x <= v]) / length(x)
}
result <- apply(X, 2, percentile2)
Этот код действительно возвращает правильный результат, но я бы предпочел что-нибудь более элегантное.