【发布时间】:2011-12-02 14:51:10
【问题描述】:
请参阅下面的 R 代码。函数 (someRfunction) 对向量进行操作并返回一个标量值。数据是对 (x,y),其中 x 和 y 是长度为 n 的向量,可能很大。
我想知道 x* 的值,使得 someRfunction 在 y 上的结果 {x>x*} 最大化。该函数对 y 值进行操作,并且在 x* 中是非单调的。我需要评估所有 x*(即 x 的每个元素)。如果执行一次,速度不是问题,但代码会在模拟中执行多次。有什么方法可以让这段代码更高效/更快?
### x and y are vectors of length n
### sort x and y such that they are ordered by descending x
xord <- x[order(-x)]
yord <- y[order(-x)]
maxf <- -99999
maxcut <- NA
for (i in 1:n) {
### yi is a subvector of y that corresponds to y[x>x{i}]
### where x{i} is the (n-i+1)th order statistic of x
yi <- yord[1:(i-1)]
fxi <- someRfunction(yi)
if (fxi>maxf) {
maxf <- fxi
maxcut <- xord[i]
}
}
谢谢。
编辑:让 someRfunction(yi)=t.test(yi)$statistic.
【问题讨论】:
-
您的代码可能会受益于重要的矢量化。在这里查看一些一般性建议:stackoverflow.com/a/8285793/636656
-
为什么不使用optimizer?