按特定顺序对 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
中是否有一种简单的方法可以在循环中执行此操作?
鉴于你的 f
和 g
,我会这样做:
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
我正在迭代地解决 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
中是否有一种简单的方法可以在循环中执行此操作?
鉴于你的 f
和 g
,我会这样做:
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