如何在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
相关产品推荐
相关产品推荐

