R语言中按指定规则合并两个向量的高效实现方法
R语言高效实现向量按规则截断方案
最高效的实现方式是直接调用R底层向量化操作,全程避免R层显式循环,兼容各类边界场景,代码如下:
# 判定aa中是否存在取值为1的元素 if (any(aa == 1)) { # 定位第一个1出现的位置,which.max匹配到首个结果即返回,无需遍历全向量,性能优于which()[1]写法 cut_pos <- which.max(aa == 1) cc <- bb # 截断位置之后的所有元素置0 cc[(cut_pos + 1):length(cc)] <- 0 } else { # 无匹配截断位置时直接返回bb原向量 cc <- bb }
效率说明
- 所有核心操作(逻辑判断、
which.max、向量索引赋值)均为R底层C语言实现,时间复杂度为O(n),是所有可行方案中速度最快的,即使处理长度上百万的大向量也不会出现性能瓶颈。 - 用你给出的示例向量测试,运行后得到的
cc结果为c(0, 2, 0, 0, 3, 0, 0, 0),完全符合需求。
内容的提问来源于stack exchange,提问作者Chell
相关产品推荐
相关产品推荐

