R语言基础seq()函数如何实现分段可变增量生成目标序列
R基础环境下用seq()生成分段步长的连续序列
seq()是R基础环境自带的序列生成函数,仅支持传入单组的起始值、终止值、步长参数,没法直接一次性输出跨多个不同步长区间的连续序列。要实现要求的生成规则,只需要拆分生成各区间的匹配子序列,再通过R基础的向量拼接能力整合即可。
对齐规则匹配各段子序列
按照给定的步长要求:
- 1~10区间:步长1,直接调用
seq(1, 10, 1)即可生成1、2…10的整数序列 - 10.1~11.9区间:步长0.1,直接调用
seq(10.1, 11.9, 0.1)生成按0.1递增的小数序列 - 12~15区间:要求步长为1,原参考的独立序列写法
seq(12,15,0.1)存在参数笔误,修正为seq(12, 15, 1),生成12、13、14、15的整数序列
注意三个区间的边界是自然衔接的:第一段末尾值为10,刚好对应第二段起始值10.1;第二段末尾值为11.9,刚好对应第三段起始值12,拼接后不会出现取值断档
完整整合实现
直接通过基础的c()函数按顺序拼接三个由seq()生成的子序列,就能得到符合要求的完整序列,可直接运行的代码如下:
# 生成整合后的目标序列 target_seq <- c( seq(1, 10, 1), seq(10.1, 11.9, 0.1), seq(12, 15, 1) )
实际使用的注意点
受浮点数存储精度影响,seq(10.1, 11.9, 0.1)的输出可能出现边界值误差(比如把11.9存储为11.89999999999999),导致和第三段起始值12之间出现非预期的间隔。可以在拼接完成后做简单的精度修正:
# 消除浮点精度带来的衔接异常 target_seq <- round(target_seq, 1)
内容的提问来源于stack exchange,提问作者arndtupb
相关产品推荐
相关产品推荐

