You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言嵌套循环中将线性规划结果存入数据框

嘿,别纠结啦!刚学R的时候碰到这种“结果存不进向量”的问题太常见了,我帮你一步步搞定~

首先得明确:lpSolve里的lp()函数返回的是一个列表对象,不是单个数值,直接把它塞向量里肯定不行,得先提取你需要的具体结果(比如目标函数值、变量解),再存到向量里。

完整示例代码

我先补全你没写完的代码,再加上循环存储的正确写法:

library(lpSolve)

# 先定义多组权重,比如这里用a1从1到5、a2从1到5的所有组合
weight_pairs <- expand.grid(a1 = 1:5, a2 = 1:5)

# 预分配存储目标函数值的向量(比每次c()添加更高效)
obj_results <- numeric(nrow(weight_pairs))
# 如果要存x1和x2的解,可以预分配一个矩阵
var_solutions <- matrix(nrow = nrow(weight_pairs), ncol = 2, 
                        dimnames = list(NULL, c("x1", "x2")))

# 循环处理每组权重
for (i in 1:nrow(weight_pairs)) {
  # 取出当前组的权重
  current_a1 <- weight_pairs$a1[i]
  current_a2 <- weight_pairs$a2[i]
  
  # 1. 设置目标函数:max a1*x1 + a2*x2
  f.obj <- c(current_a1, current_a2)
  
  # 2. 约束矩阵
  f.con <- matrix(
    c(1, 1,   # 约束1:x1 + x2 <= 500
      8, -9), # 约束2:8x1 - 9x2 = 0
    nrow = 2, byrow = TRUE
  )
  
  # 3. 约束方向:<= 和 =
  f.dir <- c("<=", "=")
  
  # 4. 约束右侧的数值
  f.rhs <- c(500, 0)
  
  # 5. 求解最大化线性规划
  lp_out <- lp("max", f.obj, f.con, f.dir, f.rhs)
  
  # 6. 提取结果并存入向量/矩阵
  if (lp_out$status == 0) { # status=0表示求解成功
    obj_results[i] <- lp_out$objval  # 存目标函数值
    var_solutions[i, ] <- lp_out$solution  # 存x1、x2的解
  } else {
    # 求解失败时存NA,避免程序中断
    obj_results[i] <- NA
    var_solutions[i, ] <- NA
  }
}

# 查看结果
print("目标函数值向量:")
obj_results
print("x1和x2的解矩阵:")
var_solutions

关键知识点

  • 预分配容器:用numeric(n)或matrix()提前分配好存储的空间,比每次用c(obj_results, new_value)添加元素效率高太多,尤其是循环次数多的时候。
  • 提取lp结果:lp()返回的列表里常用的元素:
    • $objval:目标函数的最优值
    • $solution:变量x1、x2的最优解
    • $status:求解状态(0=成功,其他数值对应不同错误)
  • 错误处理:加入if (lp_out$status == 0)的判断,能避免求解失败时程序报错,还能标记出有问题的权重组。

内容的提问来源于stack exchange,提问作者Sankalp Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:15:18