r语言 - 如何改变unlist use.names构造它放在一起的名字的方式?



我有一组嵌套列表,如:

setoflists <- list(first.list = list(letter.a=1, letter.b=2, letter.c=3),
second.list = list(letter.d=4, letter.e=5, letter.f=6))

我想把它平铺成一个列表。但是,我希望列表中对象的名称首先是子列表,然后是顶级列表,中间用下划线"_&quot分隔。一个原因是我的列表名称中已经有很多句号(.)了。

我可以像这样用unlist来平化列表:

newlist <- unlist(setoflists, use.names = T, recursive = F)

但是产生的名字是top list,然后是sublist,用".">

> names(newlist)
[1] "first.list.letter.a"  "first.list.letter.b"  "first.list.letter.c"  "second.list.letter.d" "second.list.letter.e"
[6] "second.list.letter.f"

我要的格式是:

letter.a_first.list
letter.b_first.list ...

我不认为有一种方法来控制使用当前的方法,因为它调用make.names()作为unlist()的一部分。之后可能需要重命名:

names(newlist) <- unlist(Map(paste, lapply(setoflists, names), names(setoflists), sep = "_"))
names(newlist)
[1] "letter.a_first.list"  "letter.b_first.list"  "letter.c_first.list"  "letter.d_second.list" "letter.e_second.list"
[6] "letter.f_second.list"

regex的一个解决方案,遵循@ritchie-sacramento的第一个想法:

setoflists <- list(firstlist = list(letter.a=1, letter.b=2, letter.c=3),
secondlist = list(letter.d=4, letter.e=5, letter.f=6))
newlist <- unlist(setoflists, use.names = T, recursive = F)
names(newlist) <- sub("(.*)(?:[.])(letter.+)", "\2_\1", names(newlist))
names(newlist)

输出:

> names(newlist)
[1] "letter.a_first.list" "letter.b_first.list" "letter.c_first.list" "letter.d_secondlist" "letter.e_secondlist" "letter.f_secondlist"

相关内容

  • 没有找到相关文章

最新更新