为什么不列出我的列表数据结构导致不同的长度?列表的长度为13951
。未列出结果的长度为13654
。没有NULL
或NA
。
> 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
答案 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级列表。