mylist <- list(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    123, NULL, 456)

> mylist
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL

[[5]]
NULL

[[6]]
NULL

[[7]]
NULL

[[8]]
NULL

[[9]]
NULL

[[10]]
NULL

[[11]]
[1] 123

[[12]]
NULL

[[13]]
[1] 456

我的列表有13个元素,其中11个为空.我想删除它们,但保留非空元素的索引.

mylist2 = mylist[-which(sapply(mylist, is.null))]
> mylist2
[[1]]
[1] 123

[[2]]
[1] 456

这可以很好地删除空元素,但我不希望非空元素被重新索引,也就是说,我希望mylist2看起来像这样,其中非空条目的索引被保留.

> mylist2
[[11]]
[1] 123

[[13]]
[1] 456
r

推荐答案

最接近的方法是先命名列表元素,然后删除空值.

names(x) <- seq_along(x)

## Using some higher-order convenience functions
Filter(Negate(is.null), x)
# $`11`
# [1] 123
# 
# $`13`
# [1] 456

# Or, using a slightly more standard R idiom
x[sapply(x, is.null)] <- NULL
x
# $`11`
# [1] 123
# 
# $`13`
# [1] 456

R相关问答推荐

根据对 R 中的特定列求和创建一个新值

使用 ggplot2 创建一个中心 y 轴图,左右两侧有两个 x 轴

在彩色和灰度下工作的调色板?

如何在 r 中为转换后的变量创建汇总统计表

合并三个不同行长的df

按其他日期列中的信息填充缺失的变量 (R)

如何显示多个图层的图例(geom_point 和 geom_bar)?

更改输入值时不要清除(用户输入的)react 变量的值

当新列名作为字符向量给出时,在“data.table”中对数据进行分组的好方法

如何为每个条件添加中位数和标准差

删除不增加基于其他列值的行

R Plotly Bar Chart - 添加水平线标记

使用 dplyr 进行动态编程 - 使用动态输入改变多个动态列

如何从具有数据的其他行推断 R 数据框中的缺失值?

R过滤多次出现但不包含特定字符串的数据

可以使 data.table 输出看起来更像 tibble 输出吗? (10 行,仅打印适合屏幕的列)

如何清理包含混合变量的列,例如 char 格式的当前、空白、R 中的字符串

如何根据固定重复对数字列表进行分组

R:如何在ggplot中将对角线添加到分箱箱线图中

R Dataframe 重组和总结