我想获取列表列表的名称。因此,我想使用列表元素列表(第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;是预期的结果。
答案 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))