求基于基础R函数的无循环序列生成方法:输入2:5生成指定向量
解决方案
这问题挺有意思的,刚好可以用基础R的函数组合来解决,完全不用for循环。这里有个简洁的实现方式:
my_seq <- function(x) { unlist(lapply(x, function(i) i:max(x))) }
代码解释
- 函数接收一个向量(比如
2:5)作为输入参数x。 lapply(x, function(i) i:max(x)):遍历输入向量中的每个元素i,为每个i生成从i到输入向量最大值的子序列。这一步会返回一个列表,每个列表元素对应一个子序列。unlist():把列表中的所有子序列展开合并成一个单一的向量,就是你需要的结果。
测试验证
运行以下代码就能得到你想要的输出:
# 测试输入2:5 my_seq(2:5) # 输出结果:2 3 4 5 3 4 5 4 5 5
补充优化(可选)
如果你想让代码更高效,可以用vapply()替代lapply(),提前指定输出的类型,避免类型推断的开销:
my_seq <- function(x) { unlist(vapply(x, function(i) i:max(x), FUN.VALUE = integer(max(x) - i + 1))) }
你提到seq()的from参数不支持向量输入,这个限制确实存在,但通过lapply()逐个处理每个起始值,就能完美绕开这个问题,同时保持代码的优雅简洁。
内容的提问来源于stack exchange,提问作者Athaeneus
相关产品推荐
相关产品推荐

