R语言列表元素滚动求和:lapply与Reduce使用问题求助
问题分析与解决
首先,你的代码核心问题是索引计算的运算符优先级错误:R中:的优先级高于-,所以i-2:i会被解析为i - (2:i),而非你预期的(i-2):i。比如当i=3时,2:i是c(2,3),i-2:i就变成3 - c(2,3) = c(1,0),R中索引0会返回NA,自然得不到正确结果。
修正后的代码
只需给索引范围加上括号,确保先计算起始位置i-2,再生成连续的索引序列:
thr2 <- list(1,2,3,4,5) thr3 <- lapply(seq(3,5), function(i) Reduce("+", thr2[(i-2):i]))
运行后thr3会得到预期的[[1]]=6、[[2]]=9、[[3]]=12。
更高效的替代方案(针对数值列表)
因为你的列表元素都是单个数值,先转成向量再计算滚动和会更简洁高效:
vec <- unlist(thr2) thr3 <- lapply(seq_len(length(vec)-2), function(j) sum(vec[j:(j+2)]))
内容的提问来源于stack exchange,提问作者jlewis
相关产品推荐
相关产品推荐

