Saya memiliki matriks berukuran 10.000 x 100 dan vektor dengan panjang 100. Saya ingin menerapkan fungsi khusus, persentil, yang menggunakan argumen vektor dan argumen skalar, ke setiap kolom matriks sedemikian rupa sehingga pada iterasi j, argumen yang digunakan dengan persentil adalah kolom j dari matriks dan entri j dari vektor. Apakah ada cara untuk menggunakan salah satu fungsi apply untuk melakukan ini?
Ini kode saya. Ini berjalan, tetapi tidak memberikan hasil yang benar.
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)
Solusi yang saya gunakan adalah menambahkan y ke X, dan menulis ulang fungsi persentil, seperti yang ditunjukkan di bawah ini.
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)
Kode ini memberikan hasil yang benar, tetapi saya lebih memilih sesuatu yang lebih elegan.