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

R语言筛选列表中存在至少5次连续非零值的数值向量

R命名数值向量列表过滤实现

你的实现思路用Filter搭配rle做连续段判定是完全可行的,修正原代码的语法、逻辑错误后,最终代码和你最初的写法风格保持一致:

# 构造最小可复现测试样例
vec1 <- c(rep(0, 10), rep(1, 4), rep(0,5), rep(-1,5))
vec2 <- c(rep(-1, 7), rep(0,99), rep(1, 6))
vec3 <- c(rep(1,2), rep(-1,2), rep(0,10), rep(-1,4), rep(0,8))
vec4 <- rep(0, 100)

dummy_list <- list(vec1, vec2, vec3, vec4)
names(dummy_list) <- c("first", "second", "third", "fourth")

# 执行过滤:保留存在任意连续非零值长度≥5的向量
filtered_list <- Filter(function(x) {
  rle_result <- rle(x != 0)
  any(rle_result$values & rle_result$lengths >= 5)
}, dummy_list)

运行后得到的filtered_list仅保留原列表中first、second两个向量,完全符合预期输出。

原尝试代码的问题说明:

  • 传入Filter的参数x是列表中的数值向量本身,不是嵌套列表,不能用$取子元素
  • 没有对rle结果同时做「非零段」和「段长度达标」两个维度的判断
  • 不需要调用which(),any()会直接返回是否存在符合条件的段,逻辑更简洁

内容的提问来源于stack exchange,提问作者ramen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:57:34