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

R语言:在嵌套列表中筛选全为TRUE的案例

找出嵌套列表中三元素全为TRUE的子项位置

我们需要从多层嵌套列表里筛选出所有包含三个"TRUE"字符串的子向量,并返回它们在原结构中的位置(格式如l2[[1]])。

示例数据

l1 <- list( c("TRUE","FALSE","FALSE") , c("FALSE","FALSE","FALSE") , c("FALSE","FALSE","FALSE") )
l2 <- list( c("TRUE","TRUE","TRUE") , c("TRUE","TRUE","TRUE") , c("FALSE","FALSE","FALSE") )
l3 <- list( c("TRUE","TRUE","TRUE") , c("FALSE","FALSE","FALSE") , c("TRUE","FALSE","FALSE") ) 
mylist <- list(l1,l2,l3)

解决方案1:基础循环实现

用两层循环遍历嵌套结构,逐一判断每个子向量是否符合条件,生成对应的位置字符串:

result <- character(0)

# 外层遍历mylist的一级元素(对应l1、l2、l3)
for (main_idx in seq_along(mylist)) {
  sub_list <- mylist[[main_idx]]
  # 内层遍历每个一级元素下的子列表
  for (sub_idx in seq_along(sub_list)) {
    current_vec <- sub_list[[sub_idx]]
    # 判断三个元素是否全为"TRUE"
    if (all(current_vec == "TRUE")) {
      pos_str <- paste0("l", main_idx, "[[", sub_idx, "]]")
      result <- c(result, pos_str)
    }
  }
}

# 输出结果
result

运行后输出:

[1] "l2[[1]]" "l2[[2]]" "l3[[1]]"

解决方案2:purrr包简洁实现

如果习惯用tidyverse风格的函数,可以用purrr::imap遍历并保留索引,写法更简洁:

library(purrr)

result <- imap(mylist, function(sub_list, main_idx) {
  imap(sub_list, function(vec, sub_idx) {
    if (all(vec == "TRUE")) {
      paste0("l", main_idx, "[[", sub_idx, "]]")
    }
  })
}) %>% 
  flatten() %>%  # 展平嵌套列表
  discard(is.null())  # 移除不符合条件的空值

result

注意事项

示例数据中的TRUE/FALSE是字符串类型,所以判断时用current_vec == "TRUE";如果你的实际数据是逻辑型(即TRUE/FALSE不带引号),直接用all(current_vec)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:25:21