答案 0 :(得分:3)
外部很好做这样的嵌套操作,它将函数应用于每个元素组合并返回一个矩阵。
{{1}}
答案 1 :(得分:2)
这类似于计算AUC。有效的方案可以做到这一点:
U1 <- function(x, y) {
sum(outer(x, y, ">"))
}
# devtools::install_github("privefl/bigstatsr")
U2 <- function(x, y) {
n <- length(x)
m <- length(y)
bigstatsr::AUC(c(x, y), rep(1:0, c(n, m))) * n * m
}
x <- rnorm(1e4)
y <- rnorm(1e3)
microbenchmark::microbenchmark(
U1(x, y),
U2(x, y)
)
all.equal(U1(x, y), U2(x, y))
结果:
Unit: milliseconds
expr min lq mean median uq max neval cld
U1(x, y) 207.441259 210.245571 215.022827 211.683981 214.707473 423.98014 100 b
U2(x, y) 4.641516 5.037166 5.853701 5.154041 5.330179 21.99448 100 a
请注意,通常,当x_i和y_j等于时,它会计数0.5(这是bigstatsr::AUC
在这里所做的)。