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
うむ。わかれば簡単なんですがハマるときはハマる。