R:如何按原始顺序获取列表名称?

时间:2015-12-23 14:06:23

标签: r list

我想获取列表列表的名称。因此,我想使用列表元素列表(第2级)粘贴(或添加)列表元素(第一级)的名称。这应该用"。"来完成。对我来说重要的是使名称与列表列表中的顺序相同。这里有一个例子(注意我有更多的子列表,因为每个元素有9个)没有值:

GER_WF_groups <- list(A=list(fruits.2000=matrix(),nuts.2000=matrix(),veggies.2000=matrix(),
            fruits.2001=matrix(),nuts.2001=matrix(),veggies.2001=matrix(),
            fruits.2002=matrix(),nuts.2002=matrix(),veggies.2002=matrix()), 
     B=list(fruits.2000=matrix(),nuts.2000=matrix(),veggies.2000=matrix(),
            fruits.2001=matrix(),nuts.2001=matrix(),veggies.2001=matrix(),
            fruits.2002=matrix(),nuts.2002=matrix(),veggies.2002=matrix()), 
     C=list(fruits.2000=matrix(),nuts.2000=matrix(),veggies.2000=matrix(),
            fruits.2001=matrix(),nuts.2001=matrix(),veggies.2001=matrix(),
            fruits.2002=matrix(),nuts.2002=matrix(),veggies.2002=matrix()))

直到知道我使用复杂的方法来获得这个有序的名称,但它有效,见下文:

years_sapply2 <- sapply(GER_WF_groups,function(x) paste("BLUE", names(x) ,sep="."))
str(years_sapply2)
years_mat2 <- matrix(years_sapply2, nrow=9, byrow=F)
years_mat3 <- matrix(years_mat2, ncol=1, byrow=F)
years_vec <- years_mat3[,1]
BLUEyears <- years_vec[1:9]
GREENyears <- BLUEyears
GREYyears <- BLUEyears
GREENyearsN <- sub("BLUE", "GREEN", GREENyears)
GREYyearsN <- sub("BLUE", "GREY", GREYyears)
years_namesALL <- c(BLUEyears, GREENyearsN, GREYyearsN)

我的问题是:有更快/更简单的方法来完成这项工作吗?感谢

&#34; years_namesALL&#34;是预期的结果。

2 个答案:

答案 0 :(得分:3)

也许试试这个:

gsub("C","GREY",gsub("A","BLUE",gsub("B","GREEN",names(unlist(GER_WF_groups)))))

编辑(无耻地复制@Ananda Mahto对同一问题的编辑):

gsub("C","GREY",gsub("A","BLUE",gsub("B","GREEN",names(unlist(GER_WF_groups,recursive=F)))))

但嵌套的gsub显然不优雅。

答案 1 :(得分:3)

Vongo方法的变体如下:

names(unlist(setNames(GER_WF_groups, c("BLUE", "GREEN", "GREY"))))
##  [1] "BLUE.fruits.2000"   "BLUE.nuts.2000"     "BLUE.veggies.2000" 
##  [4] "BLUE.fruits.2001"   "BLUE.nuts.2001"     "BLUE.veggies.2001" 
##  [7] "BLUE.fruits.2002"   "BLUE.nuts.2002"     "BLUE.veggies.2002" 
## [10] "GREEN.fruits.2000"  "GREEN.nuts.2000"    "GREEN.veggies.2000"
## [13] "GREEN.fruits.2001"  "GREEN.nuts.2001"    "GREEN.veggies.2001"
## [16] "GREEN.fruits.2002"  "GREEN.nuts.2002"    "GREEN.veggies.2002"
## [19] "GREY.fruits.2000"   "GREY.nuts.2000"     "GREY.veggies.2000" 
## [22] "GREY.fruits.2001"   "GREY.nuts.2001"     "GREY.veggies.2001" 
## [25] "GREY.fruits.2002"   "GREY.nuts.2002"     "GREY.veggies.2002" 

如果您只有一个级别的嵌套,您可以尝试:

names(unlist(setNames(GER_WF_groups, c("BLUE", "GREEN", "GREY")), recursive = FALSE))
相关问题