1. ホーム
  2. r

[解決済み] R: リストからNULL要素を削除する

2023-02-10 03:18:14

質問

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個はNULLです。私はそれらを削除したいのですが、空でない要素のインデックスを保持します。

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

[[2]]
[1] 456

これは NULL 要素をうまく取り除きますが、空でない要素にはインデックスを付け直したくないので、つまりは mylist2 をこのようにしたいのです。空でない項目のインデックスは保存されます。

> mylist2
[[11]]
[1] 123

[[13]]
[1] 456

どのように解決するのですか?

一番近いのは、まずリスト要素に名前を付けてから、NULLを削除することです。

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