我有一个嵌套列表,想通过遍历列表中的元素和R中每个元素的子元素来创建字符向量(用于文件路径/输出)。该列表包含174个元素,每个元素这些元素具有五个子元素(这些子元素的名称在列表的每个元素中都是一致的)。
例如,参见下面的嵌套列表,该列表包含两个元素,每个元素具有五个子元素:
iter1 <- list(item1 = "a", item2 = "b",item3 = "c", item4 = "d",item5 = "e")
iter2 <- list(item1 = "a", item2 = "b",item3 = "c", item4 = "d",item5 = "e")
All <- list(iter1 = iter1, iter2 = iter2)
所需的矢量输出将遵循以下结构(假设所有输出都保存在标有“输出”的文件夹中:
[1] "output/iter1_item1.png"
[2] "output/iter1_item2.png"
[3] "output/iter1_item3.png"
[4] "output/iter1_item4.png"
[5] "output/iter1_item5.png"
[6] "output/iter2_item1.png"...etc.
除非我弄错了,否则字符向量的长度应为870(174 * 5)。
我与以下代码非常接近:
for(i in 1:length(All)){
output_names <- paste0("output/",names(All[i]),"_",names(All[[i]]),".png")}
它产生一个长度为5的字符向量-本质上讲,是第一个具有五个子元素的元素。我希望代码迭代每个元素,以便其余元素也被捕获(上面的可重现示例仅包含两个元素,但我的原始列表包含175个元素)。
提前感谢您对此问题的帮助。
答案 0 :(得分:0)
使用示例数据,可以将顶层名称重复适当的次数,并在列表上sapply
合并底层名称。
paste0('output/', rep(names(All), lengths(All)), '_', sapply(All, names), '.png')
# [1] "output/iter1_item1.png" "output/iter1_item2.png" "output/iter1_item3.png"
# [4] "output/iter1_item4.png" "output/iter1_item5.png" "output/iter2_item1.png"
# [7] "output/iter2_item2.png" "output/iter2_item3.png" "output/iter2_item4.png"
# [10] "output/iter2_item5.png"
如果子列表的长度不同,则需要unlist(lapply(All, names))
而不是sapply(All, names)
。