You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:09:58