如何在R中不使用循环生成跳过对应迭代元素的目标序列
无循环实现方案
这里有几种不用显式for循环的实现方式,都能得到目标序列2 3 1 3 1 2:
- 函数式隐式迭代方案:
x <- unlist(lapply(1:3, function(i) (1:3)[-i]))
逻辑很直白:对1到3的每个i,提取1:3中除i外的元素,再把所有结果拼接成一个向量。
- 矩阵操作方案:
# 将重复序列转为按行排列的3×3矩阵 mat <- matrix(rep(1:3, 3), nrow = 3, byrow = TRUE) # 定位并标记第i行第i列的元素为NA mat[cbind(1:3, 1:3)] <- NA # 按行展开矩阵并剔除NA值 x <- na.omit(c(t(mat)))
利用矩阵索引精准定位要移除的元素,再通过转置和去NA操作得到目标序列。
- 简洁
mapply写法:
x <- unlist(mapply(function(vec, idx) vec[-idx], rep(list(1:3), 3), 1:3))
和第一种思路一致,只是通过mapply同时传递每组的基础向量和要移除的索引值。
内容的提问来源于stack exchange,提问作者Jobs
相关产品推荐
相关产品推荐

