如何用R语言生成先增后减的向量?能否使用c()函数实现?
生成先递增后递减的向量(附1→20→1的具体实现)
嘿,我来帮你搞定这两个问题!先从你提到的具体例子说起——生成1 2 … 19 20 19 … 2 1这样的向量,再聊聊通用的先增后减向量怎么弄,以及你关心的c()函数能不能用的问题。
一、实现1→20→1的目标向量
答案是:完全可以用c()函数实现! 这也是最直接的方式之一。
方法1:直接用:生成序列+c()拼接
我们可以把整个向量拆成两部分:从1到20的递增序列,以及从19到1的递减序列(注意去掉重复的20,避免结果里出现两次20),然后用c()把它们拼起来:
target_vec <- c(1:20, 19:1)
运行这段代码后,target_vec就是你想要的1,2,...,19,20,19,...,2,1啦。
方法2:用seq()+rev()更灵活
如果想让代码可读性更强,或者需要调整步长,也可以用seq()生成序列,再用rev()反转递减部分:
target_vec <- c(seq(1, 20), rev(seq(1, 19)))
这里rev(seq(1,19))会把1到19的序列反转成19到1,和19:1效果一样,拼起来结果完全相同。
方法3:封装成函数复用
要是你以后经常需要生成这种“先增到n再递减回来”的向量,可以写个小函数:
create_peak_vector <- function(peak) { c(seq(1, peak), rev(seq(1, peak - 1))) } # 调用生成到20的向量 create_peak_vector(20)
这样只要传入峰值(比如20),就能一键生成目标向量啦。
二、通用的先递增后递减向量生成
如果你的需求不是对称的(比如先增到15再降到5,或者步长不是1),同样可以用c()拼接两个自定义序列来实现:
- 示例1:先从1递增到15,再递减到5
custom_vec <- c(1:15, 14:5)
- 示例2:先从2递增到10(步长2),再从8递减到2(步长2)
custom_vec <- c(seq(2, 10, 2), seq(8, 2, -2))
本质逻辑都是一样的:用序列生成函数(:或seq())分别搞定递增和递减部分,再用c()把它们组合成一个完整向量。
内容的提问来源于stack exchange,提问作者Momo Tontang
相关产品推荐
相关产品推荐

