我有一个list
,其中length
为14.在每一行中,其中一些是NULL
值,其中一些有多个数字。这是清单:
> start_positions
[[1]]
NULL
[[2]]
NULL
[[3]]
NULL
[[4]]
[1] 1517
[[5]]
NULL
[[6]]
NULL
[[7]]
NULL
[[8]]
NULL
[[9]]
[1] 1410
[[10]]
[1] 5995
[[11]]
NULL
[[12]]
[1] 13880 24631
[[13]]
NULL
[[14]]
[1] 18622
我想取消列表并删除这些NULL
值,但请保留list
的订单号,如下所示:
list start_positions
4 1517
9 1410
10 5995
12 13880
12 24631
14 18622
我用rbind()
尝试了do.call()
和unlist()
,但它只给了我一列,并从1开始排名。(我想我应该列出每一行?但是我不知道怎么做。)
答案 0 :(得分:1)
由于NULL
值,您会收到警告,但您可以使用stack
:
myList <- list(NULL, NULL, 1, 2, NULL, c(3, 4)) ## Sample data
stack(setNames(myList, seq_along(myList)))
# values ind
# 1 1 3
# 2 2 4
# 3 3 6
# 4 4 6
# Warning message:
# In stack.default(setNames(myList, seq_along(myList))) :
# non-vector elements will be ignored
如果您想避免警告,可以在命名之后将列表分组:
names(myList) <- seq_along(myList)
stack(myList[!sapply(myList, is.null)])
请注意,在任何情况下stack
都需要names
。在第一个示例中,我使用setNames
“动态”添加了它们,在第二个示例中,我直接添加了它们。