多くの R ユーザーは、最終的にデータから要素を削除する多くの方法を見つけ出します。1 つの方法は を使用するNULL
ことです。特に、 から列を削除しdata.frame
たり、 から要素を削除したりする場合に使用しますlist
。
data.frame
最終的に、ユーザーは一度に複数の列を削除したい状況に遭遇し<- list(NULL)
、解決策として思いつきました (使用<- NULL
するとエラーが発生するため)。
Adata.frame
はの特殊なタイプであるため、 から項目を削除する方法は、 から列を削除する方法と同じであるlist
と想像するのは難しくありません。ただし、以下の例に示すように、異なる結果が生成されます。list
data.frame
## Make some small data--two data.frames and two lists
cars1 <- cars2 <- head(mtcars)[1:4]
cars3 <- cars4 <- as.list(cars2)
## Demonstration that the `list(NULL)` approach works
cars1[c("mpg", "cyl")] <- list(NULL)
cars1
# disp hp
# Mazda RX4 160 110
# Mazda RX4 Wag 160 110
# Datsun 710 108 93
# Hornet 4 Drive 258 110
# Hornet Sportabout 360 175
# Valiant 225 105
## Demonstration that simply using `NULL` does not work
cars2[c("mpg", "cyl")] <- NULL
# Error in `[<-.data.frame`(`*tmp*`, c("mpg", "cyl"), value = NULL) :
# replacement has 0 items, need 12
同じ概念を に適用することに切り替えlist
、動作の違いを比較します。
## Does not fully drop the items, but sets them to `NULL`
cars3[c("mpg", "cyl")] <- list(NULL)
# $mpg
# NULL
#
# $cyl
# NULL
#
# $disp
# [1] 160 160 108 258 360 225
#
# $hp
# [1] 110 110 93 110 175 105
## *Does* drop the `list` items while this would
## have produced an error with a `data.frame`
cars4[c("mpg", "cyl")] <- NULL
# $disp
# [1] 160 160 108 258 360 225
#
# $hp
# [1] 110 110 93 110 175 105
私が持っている主な質問は、 adata.frame
が a の場合list
、なぜこのシナリオでこれほど異なる動作をするのかということです。要素がいつドロップされ、いつエラーが発生し、いつ単純にNULL
値が与えられるかを知る簡単な方法はありますか? それとも試行錯誤に頼っているのでしょうか。