ฉันมีเมทริกซ์ขนาด 10,000 x 100 และเวกเตอร์ที่มีความยาว 100 ฉันต้องการใช้ฟังก์ชันที่กำหนดเอง เปอร์เซ็นไทล์ ซึ่งรับอาร์กิวเมนต์เวกเตอร์และอาร์กิวเมนต์สเกลาร์กับแต่ละคอลัมน์ของ เมทริกซ์ในลักษณะที่ในการวนซ้ำ j อาร์กิวเมนต์ที่ใช้กับ percentile คือคอลัมน์ 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)
รหัสนี้ส่งคืนผลลัพธ์ที่ถูกต้อง แต่ฉันต้องการบางสิ่งที่หรูหรากว่านี้เล็กน้อย