簡體   English   中英

遍歷嵌套列表的某些元素 [R]

[英]Iterating through certain elements of nested list [R]

我有一個很大的嵌套列表。 它的結構類似於提供的虛擬數據。 我想遍歷這個列表並將某個函數僅應用於名為“seq”的元素(向量),而忽略其他類別。 感興趣的元素應受制於另一個函數 - 下面偽代碼中的“function_of_interest”,輸出應附加到新列表中。 由於我的數據量很大,我想並行進行。

這是虛擬輸入:

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)))

這是我失敗的嘗試之一:

#循環遍歷嵌套列表

  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]]))
    }
  }

很高興獲得幫助/指導。

這個解決方案如何在x的每個元素上並行調用lapply() ,並將function_of_interest()應用於名為seq的二級嵌套列表的每個元素。 注意:這要求每個列表實際上都有一個名為seq的元素。 您需要添加額外的代碼來測試每個列表是否都是這種情況,如果其中一些可能沒有名為seq的元素。

我定義了一個function_of_interest()來測試你的代碼。

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']]))
}

輸出:

[[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

附錄:過濾每個子列表

如果您想在特定條件下過濾每個子列表,您可以在每次並行迭代中應用function_of_interest() Filter()的調用。 在此示例中,我們將僅將function_of_interest()應用於名為seq的元素中包含值1的子列表。

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']]))
}

輸出:

[[1]]
[[1]]$one_1
[1] 45


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

[[2]]$two_2
[1] 105

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM