请参阅下面的R代码。函数(someRfunction)对向量进行操作并返回标量值。数据是对(x,y),其中x和y是长度为n的向量,其可以很大。
我想知道x *的值,这样y的someRfunction的结果最大化了{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。
答案 0 :(得分:0)
如果您可以更多地了解该功能,特别是它是否平滑以及是否可以确定其渐变,您将获得更好的答案。目前,速度的唯一增加将是适度的,因为能够预先指定向量来保存结果,省略if-max子句然后在向量上使用which.max()。您可能希望查看“optimx”包中的函数optimx
。