在 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(...)
以外的东西。
我有一个列表列表 (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(...)
以外的东西。