LoginSignup
3
3

More than 5 years have passed since last update.

list内のnull項目を取り除く覚え書き

Last updated at Posted at 2016-01-28

R言語です。案外手こずったのでメモしておきます。
listの中にNULLがある場合、その項目を取り除いたlistを作る方法。

リスト作成

list型はなんでも入る柔軟さがあります。

作成
l<-list()

#いろんな入れ方ができます
l[["one"]]<-c(1,2,3,4,5)
l$two<-c(3,4,NA,6,7)
l[[4]]<-c(9,8,7)

#こうなる
> l
$one
[1] 1 2 3 4 5

$two
[1]  3  4 NA  6  7

[[3]]
NULL

[[4]]
[1] 9 8 7

NULLを取り除く

NULLの項目を取り除くにはsapplyを使うときれいに書けます。

nullを除く
ll <- l[!sapply(l,is.null)]

> ll
$one
[1] 1 2 3 4 5

$two
[1]  3  4 NA  6  7

[[3]]
[1] 9 8 7

追記(Filterを使う)

hoxo_mさんにコメントで教えて頂きました。

Filterを使おう
> Filter(Negate(is.null), l)
$one
[1] 1 2 3 4 5

$two
[1]  3  4 NA  6  7

[[3]]
[1] 9 8 7

シンプルでいい感じです。

追記(rlistを使う)

gingi99さんにコメントで教えて頂きました。
rlistというパッケージを使うともっとシンプルに書けます。
rlistはdata.frameで扱いにくいようなリストデータを扱うツールボックスです。

rlistを使おう
> list.clean(l)
$one
[1] 1 2 3 4 5

$two
[1]  3  4 NA  6  7

[[3]]
[1] 9 8 7

項目の中のNAを取り除く

おまけ。リストの中に入っている項目の中のNAを取り除く、というのもsapplyやlapplyで楽にできます。

項目の中のNAを除く
lapply(ll,function(v){v[!is.na(v)]})
$one
[1] 1 2 3 4 5

$two
[1] 3 4 6 7

[[3]]
[1] 9 8 7

うむ。わかれば簡単なんですがハマるときはハマる。

3
3
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3