首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代嵌套列表的某些元素[R]

迭代嵌套列表的某些元素[R]
EN

Stack Overflow用户
提问于 2022-07-05 12:43:48
回答 1查看 213关注 0票数 1

我有一个大的嵌套列表。它的结构类似于提供的虚拟数据。我想循环这个列表,只对名为"seq“的元素(向量)应用某个函数,而忽略其他类别。感兴趣的元素应服从另一个函数--以下伪码中的"function_of_interest“,输出应附加到新列表中。由于我的数据的大小,我想做平行的。

以下是虚拟输入:

代码语言:javascript
复制
x <- list(one = list(one_1 = list(seq = 1:9, start = 1, end = 5), 
    one_2 = list(seq = 2:11, start = 2, end = 6), one_3 = list(
        seq = 3:12, start = 3, end = 7)), two = list(two_1 = list(
    seq = 1:13, start = 8, end = 222), two_2 = list(seq = 1:14, 
    start = 13, end = 54)))

以下是我失败的一次尝试:

#循环嵌套列表

代码语言:javascript
复制
  for (gene in seq_along(genes_list)){
    for (segment in seq_along(genes_list[[gene]])){
      output_list <- c(output_list, foreach::foreach(segment) %dopar% function_of_interest(genes_list[[gene]][[segment]]))
    }
  }

很乐意得到帮助/指导。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-05 12:58:03

这个解决方案并行地调用lapply()x的每个元素进行调用,并将function_of_interest()应用于名为seq的第二级嵌套列表中的每个元素。注意:这要求每个列表实际上都有一个名为seq的元素。您需要添加额外的代码来测试每个列表是否都是这样的,如果其中一些列表没有名为seq的元素的话。

我定义了一个function_of_interest()来测试您的代码。

代码语言:javascript
复制
function_of_interest <- function(vec) sum(vec)

output_list <- foreach(i = seq_along(x)) %dopar% {
  lapply(x[[i]], function(x_ij) function_of_interest(x_ij[['seq']]))
}

产出:

代码语言:javascript
复制
[[1]]
[[1]]$one_1
[1] 45

[[1]]$one_2
[1] 65

[[1]]$one_3
[1] 75


[[2]]
[[2]]$two_1
[1] 91

[[2]]$two_2
[1] 105

增编:筛选每个子列表

如果希望在特定条件下筛选每个子列表,则可以在每次并行迭代中应用Filter()之前添加对function_of_interest()的调用。在本例中,我们只将function_of_interest()应用于在名为seq的元素中包含值1的子列表。

代码语言:javascript
复制
output_list <- foreach(i = seq_along(x)) %dopar% {
  x_i_filtered <- Filter(function(x_i) 1 %in% x_i[['seq']], x[[i]])
  lapply(x_i_filtered, function(x_ij) function_of_interest(x_ij[['seq']]))
}

产出:

代码语言:javascript
复制
[[1]]
[[1]]$one_1
[1] 45


[[2]]
[[2]]$two_1
[1] 91

[[2]]$two_2
[1] 105
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72869656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档