如何在R中高效重复行绑定矩阵(避免循环)
矩阵按行重复拼接的简洁实现
给定R矩阵:
(x <- matrix(1:6, ncol = 3, byrow = TRUE)) # [,1] [,2] [,3] # [1,] 1 2 3 # [2,] 4 5 6
需要实现类似rbind(x, x)的效果,且支持不定次数重复、避免循环,以下是几种简洁方案:
方案1:结合replicate与do.call
利用replicate生成包含k个x的列表,再通过do.call批量调用rbind合并:
k <- 2 do.call(rbind, replicate(k, x, simplify = FALSE)) # [,1] [,2] [,3] # [1,] 1 2 3 # [2,] 4 5 6 # [3,] 1 2 3 # [4,] 4 5 6
simplify=FALSE确保replicate返回列表而非数组,避免后续转换时的元素顺序混乱。
方案2:直接用matrix重构
利用matrix的填充特性,指定目标行数为原行数的k倍,byrow=TRUE会按行重复原矩阵的元素:
k <- 2 matrix(x, nrow = nrow(x)*k, byrow = TRUE) # [,1] [,2] [,3] # [1,] 1 2 3 # [2,] 4 5 6 # [3,] 1 2 3 # [4,] 4 5 6
这是最简洁的实现方式,无需额外转置或列表操作。
方案3:重复行索引提取
通过重复原矩阵的行索引,直接提取对应行:
k <- 2 x[rep(seq_len(nrow(x)), k), ] # [,1] [,2] [,3] # [1,] 1 2 3 # [2,] 4 5 6 # [3,] 1 2 3 # [4,] 4 5 6
rep(seq_len(nrow(x)), k)生成重复k次的行索引向量,索引提取后自动拼接成目标矩阵。
内容的提问来源于stack exchange,提问作者Waldir Leoncio
相关产品推荐
相关产品推荐

