按特定顺序对 R 中的向量进行排序

Sorting a vector in R in a specific order

我正在迭代地解决 R 中的约束优化问题,如果问题具有以下形式:

最小 f(x)

s.t。 g(x) < 0

我正在迭代地进行优化,所以我有一个名为 f 的变量,它保存函数 f 的当前值和向量 g 的 1 和 0,它告诉我约束是否是满足第 i 次迭代。为了提供帮助,这里有一个例子

#Imagine there are 6 time points 
f = c(7,10,6,3,-1,-9)  
g = c(1,1,0,1,1,0)

所以我想跟踪在第 i 次迭代中找到的最佳最小值,以满足约束条件。因此我希望能够计算出像

这样的向量
h = c(7,7,7,3,-1,-1)

其中 h 记录及时找到的满足约束条件的最小值。在 R 中是否有一种简单的方法可以在循环中执行此操作?

鉴于你的 fg,我会这样做:

cummin(zoo::na.locf(ifelse(g == 1, f, NA)))
# [1]  7  7  7  3 -1 -1

或者,也许更简单:

cummin((ifelse(g == 1, f, Inf)))
# [1]  7  7  7  3 -1 -1