R语言seq函数的by参数能否支持多间隔向量化设置?
实现R语言seq函数的向量化by参数
R原生的seq()函数仅支持by参数传入单个间隔值,无法直接使用多间隔的向量。要实现向量化的by参数,我们可以自定义一个函数来处理这类需求,以下是通用实现方案:
自定义函数实现
seq_vec_by <- function(from, to, by) { result <- from current <- from idx <- 1 len_by <- length(by) # 判断序列的增减方向 dir <- sign(to - from) while(TRUE) { # 循环取用by中的间隔值 step <- by[idx %% len_by + 1] current <- current + step # 根据方向判断是否超出终点范围 if ((dir > 0 && current > to) || (dir < 0 && current < to)) { break } result <- c(result, current) idx <- idx + 1 } result }
测试示例
示例1:间隔为c(1,2)
seq_vec_by(1, 10, by = c(1,2)) # 输出:[1] 1 2 4 5 7 8 10
示例2:间隔为1:5
seq_vec_by(1, 100, by = 1:5) # 输出:[1] 1 2 4 7 11 16 17 19 22 26 31 37 38 40 43 47 52 58 59 61 64 68 73 79 80 82 85 89 94 100
示例3:递减序列,间隔为c(-3,-8)
seq_vec_by(8, -5, by = c(-3,-8)) # 输出:[1] 8 5 -3
函数说明
- 自动判断序列的增减方向,适配递增和递减场景
- 循环复用
by向量中的间隔值,直到当前值超出终点范围 - 每次累加后检查是否符合终点限制,确保结果不会超出
from到to的区间
内容的提问来源于stack exchange,提问作者Maël
相关产品推荐
相关产品推荐

