data.frameをフィルター処理する必要がある場合、つまり特定の条件を満たす行を抽出する場合は、次のsubset
関数を使用します。
subset(airquality, Month == 8 & Temp > 90)
[
関数ではなく:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
私の好みには主に2つの理由があります。
私はコードが左から右に、よりよく読みます。Rについて何も知らない人でも、
subset
上記のステートメントが何をしているのかわかるでしょう。式では列を変数として参照
select
できるため、いくつかのキーストロークを節約できます。上記の例では、でairquality
一度入力するだけでsubset
、で3回入力する必要がありました[
。
それで、私は幸福に生きsubset
ていました。短くて読みやすいのでどこでも使用し、その美しさを仲間のRプログラマーにさえ主張していました。しかし、昨日私の世界はバラバラになりました。subset
ドキュメントを読んでいると、このセクションに気づきました。
警告
これは、インタラクティブに使用することを目的とした便利な関数です。プログラミングには、[のような標準サブセット関数を使用することをお勧めします。特に、引数サブセットの非標準評価は予期しない結果をもたらす可能性があります。
誰かが著者の意味を明確にするのを手伝ってくれませんか?
まず、「インタラクティブに使用する」とはどういう意味ですか?バッチモードで実行されるスクリプトとは対照的に、対話型セッションが何であるかはわかっていますが、どのような違いがあるのかわかりません。
それでは、「引数サブセットの非標準の評価」と、なぜそれが危険なのか、例を挙げて説明していただけますか?
dplyr::filter
に、同じ問題があります。つまり、環境にその名前の変数がある場合、データフレーム内の変数の代わりにその名前が使用されます。混乱を招くデバッグになります!
with(airquality, airquality[Month == 8 & Temp > 90, ])