尝试将列表展平为向量我刚刚发现了一个意外的行为。为了简化我们?unlist
建议的例子:
unlist(options())
查看原始列表大小:
length(unlist(options())) # 69 in my environment
未上市名单是否应保留其长度?我会这么认为,但是......
length(unlist(options())) # 79!!!
length(unlist(options(), use.names = F)) # Another 79
发生了什么事?我需要保留列表值,但unlist()
给了我一个额外的。
答案 0 :(得分:0)
这是因为某些列表元素可能包含多个值。因此,unlist
完全按照要求去做。
请看以下示例:
L <- list(1, c(1, 2, 3), 1, c(4, 5))
length(L) # 4 <<< How many list elements are there?
length(unlist(L)) # 7 <<< How many elements are there within the list?
lengths(L) # 1 3 1 2 <<< How many elements are in each list element?
sum(lengths(L)) # 7 <<< How many elements should we expect from unlist?
如果您只期望每个值的第一个值,则可以使用以下内容单独提取:
sapply(L, `[[`, 1)
# [1] 1 1 1 4
(这是一个等于列表长度的向量,但缺少大量数据)。