如何在R语言中筛选矩阵第一列为最小值的行 适配Nelder-Mead优化场景
问题解决方法
你生成的out矩阵结构为:第一列为Nelder-Mead优化输出的目标函数值,第二、三列为对应的参数x1、x2,筛选需求可以通过以下几种方式实现:
方法1:基础R实现(无需额外安装依赖,推荐优先使用)
直接用which.min()定位第一列最小值的行索引,按索引提取即可:# 提取第一列最小值对应的行 min_target_row <- out[which.min(out[, 1]), ] # 查看结果 min_target_row如果存在多个行的第一列值同为最小值,需要提取所有符合条件的行,使用以下代码:
all_min_rows <- out[out[, 1] == min(out[, 1]), ]方法2:tidyverse风格实现(适合后续需要继续做数据处理的场景)
如果你习惯用dplyr处理数据,可以将矩阵转为数据框后筛选:library(dplyr) # 转为数据框并命名列,筛选最小值对应的行 min_row_df <- as.data.frame(out) %>% setNames(c("target_value", "x1", "x2")) %>% filter(target_value == min(target_value))
提示:你代码中每次迭代的初始参数x、y是随机生成的,因此每次运行得到的out矩阵结果会有差异,如果需要固定复现结果,可以在for循环前加
set.seed(任意整数)固定随机种子,比如set.seed(123)。
内容的提问来源于stack exchange,提问作者user17525971
相关产品推荐
相关产品推荐

