从R中的列表和嵌套列表创建名称的向量

时间:2019-05-13 11:36:17

标签: r list for-loop

我有一个嵌套列表,想通过遍历列表中的元素和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个元素)。

提前感谢您对此问题的帮助。

1 个答案:

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