r unlist函数意外结果

r unlist函数意外结果,r,R,试图将列表展平为向量,我刚刚发现了一个意外行为。为了简化,让我们以?unlist为例: unlist(options()) 查看原始列表大小: length(unlist(options())) # 69 in my environment 未列出的清单是否应保留其长度?我想是的,但是 length(unlist(options())) # 79!!! length(unlist(options(), use.names = F)) # Another 79 发生了什么事?我需要保留列表值

试图将列表展平为向量,我刚刚发现了一个意外行为。为了简化,让我们以
?unlist
为例:

unlist(options())
查看原始列表大小:

length(unlist(options())) # 69 in my environment
未列出的清单是否应保留其长度?我想是的,但是

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

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

这是因为某些列表元素可能有多个值。因此,
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?

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

sum(length(options())==79
unlist
正在做它应该做的事情。一些
列表
元素有多个项。谢谢@AnandaMahto。我在一个大数据集中发现了这个“问题”,但使用小的
options()
我看不到它。有时,一个较小的示例有助于更清楚地看到行为。我希望我的回答中的例子有助于澄清这一点。
sapply(L, `[[`, 1)
# [1] 1 1 1 4