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

如何在R语言中按指定约束随机修改向量元素为occupied?

解决方案

核心思路

每次循环时先筛选出符合要求的可用候选位置:

  • 位置当前状态为"free"
  • 与所有已标记为"occupied"的位置距离至少为5(确保两个"occupied"之间有4个"free"间隔)

随后从候选池中随机选7个位置标记为"occupied",重复该操作22次即可。

R代码实现

# 初始化长度为40000的字符向量
my.vec <- rep("free", 40000)

# 循环22次模拟年度进展
for (year in 1:22) {
  # 获取所有已被占据的位置索引
  occupied_pos <- which(my.vec == "occupied")
  
  # 筛选符合条件的候选位置
  candidate_pos <- which(
    my.vec == "free" & 
    sapply(seq_along(my.vec), function(i) {
      all(abs(i - occupied_pos) >= 5)
    })
  )
  
  # 随机选取7个候选(若候选数不足7则取全部)
  selected_pos <- sample(candidate_pos, size = min(7, length(candidate_pos)))
  
  # 将选中位置标记为occupied
  my.vec[selected_pos] <- "occupied"
  
  # 可选:打印年度选中位置用于验证
  # cat(paste("第", year, "年选中位置:", paste(selected_pos, collapse = ", "), "\n"))
}

代码说明

  • occupied_pos:每次循环先获取已占据位置的索引,作为筛选候选的依据。
  • 筛选逻辑中的sapply遍历每个位置,检查它与所有已占据位置的距离是否都≥5,严格满足间隔要求。
  • min(7, length(candidate_pos)):做鲁棒性处理,避免后期候选位置不足7个时出错(40000长度的向量足够支撑22次选7个的需求)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:53:16