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

Cpt*_*emo 5 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"
Run Code Online (Sandbox Code Playgroud)

但是之后

names(unlist(list1))
# [1] "1.1" "2.2" "2.2" "3.3" "4.4" "4.4" "5.5" "6.6" "6.6" "6.6"
Run Code Online (Sandbox Code Playgroud)

根据文件 unlist()

默认情况下,unlist尝试保留x中存在的命名信息.

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

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

Jos*_*ien 6

unlist(unname(list1))
#  1  2  2  3  4  4  5  6  6  6 
#  1  2  3  4  5  6  7  8  9 10 
Run Code Online (Sandbox Code Playgroud)


Ben*_*ker 5

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

你可以得到你想要的东西

setNames(unlist(list1),unlist(lapply(list1,names)))
Run Code Online (Sandbox Code Playgroud)

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