如何在R中实现整数向量的连续累积拼接?
解决R语言整数向量连续累积拼接问题
错误原因分析
你编写的函数出错是因为使用paste()处理向量时的特性:当output[[i-1]]是长度大于1的向量时,paste(output[[i-1]], vec[i])会将向量的每个元素分别与vec[i]拼接,生成多个字符串(比如output[[2]]是c(1,3),和vec[3]=2拼接会得到c("1 2", "3 2")),后续strsplit只取第一个拆分结果,导致丢失了中间元素,最终得到错误输出。
正确解法
方法1:修改原有循环函数
直接使用c()合并前一个累积向量与当前元素,不需要转字符串再拆分,这是最直接的修复方式:
myfun <- function(vec){ output = vector("list", length(vec)) output[[1]] = vec[1] for(i in 2:length(vec)){ # 直接合并向量,替代paste+strsplit的错误写法 output[[i]] = c(output[[i - 1]], vec[i]) } return(output) } # 测试 vec <- c(1, 3, 2, 37) myfun(vec)
执行后会得到预期的输出:
[[1]] [1] 1 [[2]] [1] 1 3 [[3]] [1] 1 3 2 [[4]] [1] 1 3 2 37
方法2:更简洁的R风格写法
不用手动写循环,用lapply结合序列索引直接生成结果,代码更简洁:
vec <- c(1, 3, 2, 37) output <- lapply(seq_along(vec), function(x) vec[1:x])
执行后同样得到目标列表。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

