我对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
的名称匹配。
答案 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的回答更简单,但我会把它留在这里,因为它解释了一些事情。