【发布时间】:2012-10-19 20:42:19
【问题描述】:
我有两个向量 e 和 g。我想知道e 中的每个元素在g 中较小的元素的百分比。在 R 中实现这一点的一种方法是:
set.seed(21)
e <- rnorm(1e4)
g <- rnorm(1e4)
mf <- function(p,v) {100*length(which(v<=p))/length(v)}
mf.out <- sapply(X=e, FUN=mf, v=g)
对于较大的e 或g,这需要很长时间才能运行。如何更改或调整此代码以使其运行得更快?
注意:上面的 mf 函数是基于 dismo 包中 mess 函数的代码。
【问题讨论】:
-
您可以将 mf 更改为
mf <- function(p,v){100*mean(v<=p)},但我不确定这会有多大帮助。 -
谢谢 Dason,但这似乎需要更多时间
-
vapply而不是sapply可能会有所帮助。 -
@Paulo 真的吗?在我的系统上花费的时间更少......
-
@Dason,不,它没有,你是对的,你的解决方案需要更少的时间。我昨天测试的时候一定是搞错了,抱歉。