R语言无需for循环实现向量元素追加后续两个连续数的向量化方法
R语言向量化实现元素后追加连续整数的方案
首先给出不需要加载任何第三方包的基础R实现方法,代码如下:
# 定义原向量 v <- c(238,1002,569,432,6,1284) # 向量化操作得到目标结果 result <- rep(v, each = 3) + 0:2
运行后输出的result和你给出的预期结果完全一致。
实现逻辑说明
rep(v, each = 3)会将原向量的每个元素依次重复3次,输出中间结果为238,238,238,1002,1002,1002,569,569,569,432,432,432,6,6,6,1284,1284,1284- R支持向量运算的自动循环补齐规则,长度为18的中间向量和长度为3的
0:2相加时,0:2会自动循环6次,依次给每组重复的三个元素加0、1、2,正好得到你需要的连续数值序列。
其他可选实现方案
如果后续需要扩展更复杂的序列生成规则,也可以用outer函数实现:
result <- as.vector(t(outer(v, 0:2, FUN = `+`)))
该方案的逻辑是先生成一个6行3列的矩阵,每行对应原向量一个元素加0、1、2的结果,转置后拉伸为向量,输出结果和第一种方法完全一致。
性能说明
以上两种向量化方法的运行效率远高于for循环实现,当原向量长度达到百万级时,性能差距可以达到数百倍,非常适合处理大规模数据场景。
内容的提问来源于stack exchange,提问作者Jonas
相关产品推荐
相关产品推荐

