为什么我的取消列表结果比我的列表短?

时间:2017-08-27 05:38:40

标签: r

为什么不列出我的列表数据结构导致不同的长度?列表的长度为13951。未列出结果的长度为13654。没有NULLNA

> class(price)
[1] "list"

> head(price)
$`570`
[1] 0

$`440`
[1] 0

$`730`
[1] 1499

$`304930`
[1] 0

$`550`
[1] 1999

$`230410`
[1] 0

length(names(price))  # 13951
length(price)         # 13951
length(unlist(price)) # 13654

> sum(is.na(price))
[1] 0
> sum(is.null(price))
[1] 0

如何确保unlist长度与列表长度相同?

- 下面的解决方案:

> out <- do.call(c, lapply(price, (function(x) {
+   if (is.null(x)) {NA} else { x } 
+ })))
> length(out) #2
[1] 13654


> table(sapply(price, class))

numeric 
  13951 

1 个答案:

答案 0 :(得分:6)

有一件事是计算列表中的元素。另一个是计算他们的长度...

a.list <- list(a= 1, b= NULL, c = list())
length(a.list) # 3
sum(lengths(a.list)) # 1 {as suggested by Nicola}
# same as: sum(sapply(a.list, length)) # 1

我假设您已命名列表元素为NULL(或长度== 0)。当你取消登记时,那些应该丢失。

length(unlist(a.list)) #1

如果要从所有命名元素中提取内容(用NA替换NULL),可以执行以下操作。

out <- do.call(c, lapply(a.list, (function(x) {
  if (is.null(x) | length(x) == 0) {NA} else { x } 
})))
length(out) #3

这假设您没有2级列表。