在 for 循环 r 中提取列表列表的列表名称

Extract list name of list of lists in for loop r

我有一个列表列表 (mask_pairs_list),每个“子列表”都有 2 个 Nifti 文件,所以它看起来像这样。

我正在遍历此列表 for (z in mask_pairs_list) 并在主“mask_pairs_list”的每个 element/sublist 中使用“热图”和“掩码”做一些事情。然后我想用包含子列表名称的名称保存生成的 Nifti 文件,如“mordor2_result”或“apple10_result”。问题是当我尝试使用 name_placeholder <- names(z) 在子列表名称的 for 循环中获取字符向量时,它会获取子列表中的名称和 returns“热图”和“掩码”。我将如何从本质上走出一层,并获得子列表本身的名称?

谢谢!

像这样的东西应该可以工作:

##
#   made up example
#   same structure as you dataset, more or less...
#
set.seed(1)
mask_pairs <- list(
  A = list(heat_map = matrix(1:25, nc=5), 
           mask     = matrix(sample(0:1, 25, replace = TRUE), nc=5)),
  B = list(heat_map = matrix(1:25, nc=5), 
           mask     = matrix(sample(0:1, 25, replace = TRUE), nc=5)),
  C = list(heat_map = matrix(1:25, nc=5), 
           mask     = matrix(sample(0:1, 25, replace = TRUE), nc=5)),
  D = list(heat_map = matrix(1:25, nc=5), 
           mask     = matrix(sample(0:1, 25, replace = TRUE), nc=5))
) 
##
#   you start here
#
fun    <- \(x) x$heat_map * x$mask
result <- sapply(mask_pairs, fun, simplify = FALSE, USE.NAMES = TRUE)
mapply(FUN = \(result, fname) write.csv(result, file=sprintf('%s_result.csv', fname)), 
       result, names(result))

密钥正在使用 sapply(..., simplify=FALSE, USE.NAMES=TRUE) 获取命名列表。奇怪的是,lapply(...) 不接受 USE.NAMES=... 参数,所以你必须使用 sapply(..., simplify=FALSE) 等同于 lapply(...).

在这个例子中,我的 fun(...) 只是将遮罩应用于热图。您将有一个不同的 fun(...) 并且显然使用 write.csv(...) 以外的东西。