如何避免列表命名的unlist()修改

时间:2014-04-25 01:52:53

标签: r list

我对unlist()生成的名字感到有些困惑。请考虑以下MWE

vector1 <- c(1,2,3,4,5,6,7,8,9,10)
names(vector1) <- c(1,2,2,3,4,4,5,6,6,6)
names(vector1)
# [1] "1" "2" "2" "3" "4" "4" "5" "6" "6" "6"
list1 <- split(vector1,names(vector1))
names(list1)
# [1] "1" "2" "3" "4" "5" "6"

但是

names(unlist(list1))
# [1] "1.1" "2.2" "2.2" "3.3" "4.4" "4.4" "5.5" "6.6" "6.6" "6.6"

根据unlist()

的文件
  

默认情况下,取消列表会尝试保留x中的命名信息。

所以我无法理解这种特殊行为。

我的问题是,unlist()创建的名称无法与原始vector1的名称匹配。

2 个答案:

答案 0 :(得分:6)

unlist(unname(list1))
#  1  2  2  3  4  4  5  6  6  6 
#  1  2  3  4  5  6  7  8  9 10 

答案 1 :(得分:5)

我同情你的沮丧。 R(我认为)试图保留names(x)中的信息和原始组件名称中的信息(考虑unlist(setNames(list1,letters[1:6]))的结果,这使得行为更有意义)。

你可以通过

获得你想要的东西
setNames(unlist(list1),unlist(lapply(list1,names)))

虽然它确实很尴尬 - 如果我想经常这样做,我会把它变成unlistWithNames函数(或明智地命名的东西)。 PS @JoshOBrien的回答更简单,但我会把它留在这里,因为它解释了一些事情。