我有一个向量 v
和一个区间向量 w
。我想在每个区间内找到函数 f(x)
的最大值。有没有比下面的代码更快的方法来实现这个目标?
v = c(3.5, 2.5, 4, 6.5, 10, 2.3, 1.8, 4.7, 12, 11.5)
w = c(0, 5, 15, 20)
f = function(x){x^2}
> max = unlist(list(sapply(split(v, cut(v, w),drop = TRUE),
function(v) v[which.max(f(v))])), use.names = FALSE)
> max
[1] 4.7 12.0
w
定义了三个集合(其中一个为空),但是你的输出是长度为2
的向量?相反,你是否考虑将长度为3
的列表作为你的输出? - flodelunlist(list(
并将sapply
替换为vapply
。需要注意的一点是,每个区间都会调用一次f
。如果区间变得更多(并且更小),这可能会成为瓶颈,具体取决于f
的编码方式。 - Ferdinand.kraftFUN.VALUE=numeric(1)
来指示你的函数返回长度为1的数字向量。将其放在函数后面即可。 - Ferdinand.kraft