メモ:listの要素にNULLを代入する

listの要素のNULLを代入するとどうなるか。Rおじさんならみんな知っているこの操作。

x <- list(a = 1, b = 2)
x
#> $a
#> [1] 1
#> 
#> $b
#> [1] 2

x$a <- NULL
x
#> $b
#> [1] 2

そう、NULLを代入した要素が消えます。じゃあほんとに文字通り「要素にNULLを代入」したいとき、つまり、

list(a = 1, b = NULL)
#> $a
#> [1] 1
#> 
#> $b
#> NULL

みたいなのにしたいときはどうするの??

というのがふと開いたヘルプ(?Extract)に書かれていました。

Note that in all three kinds of replacement, a value of NULL deletes the corresponding item of the list. To set entries to NULL, you need x[i] <- list(NULL).

つまり、こうです。

x <- list(a = 1, b = 2)
x["a"] <- list(NULL)
x
#> $a
#> NULL
#> 
#> $b
#> [1] 2

ちなみに、ややこしいのは[[ではなくて[を使わないといけないという点です。[[を使うとこうなっちゃいます。

x <- list(a = 1, b = 2)
x$a <- list(NULL)
#> $a
#> $a[[1]]
#> NULL
#> 
#> 
#> $b
#> [1] 2

奥が深すぎるダロウ…