r取消列出功能意外结果

时间:2016-02-18 15:58:56

标签: r

尝试将列表展平为向量我刚刚发现了一个意外的行为。为了简化我们?unlist建议的例子:

unlist(options())

查看原始列表大小:

length(unlist(options())) # 69 in my environment

未上市名单是否应保留其长度?我会这么认为,但是......

length(unlist(options())) # 79!!!
length(unlist(options(), use.names = F)) # Another 79

发生了什么事?我需要保留列表值,但unlist()给了我一个额外的。

1 个答案:

答案 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

(这是一个等于列表长度的向量,但缺少大量数据)。