[解決済み] なぜ `[`] は `subset` よりも優れているのですか?
質問
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
のドキュメントで、この部分に気がついた。
警告
この関数は対話的に使用することを目的とした便利な関数です。プログラミングには、[ のような標準的なサブセット関数を使用した方が良いでしょう。特に、引数サブセットの非標準的な評価は、予期しない結果をもたらすことがあります。
どなたか、著者の言いたいことを明確にしていただけませんか?
まず、「"」とはどういう意味なのか。 インタラクティブに使用するために とは何ですか?BATCH モードで実行されるスクリプトとは対照的に、インタラクティブなセッションというのは知っていますが、どのような違いがあるのかわかりません。
では、「"」についてご説明ください。 引数 subset の非標準的な評価 と、なぜそれが危険なのか、例を挙げて説明してください。
解決方法は?
この質問に対しては、@James がコメントで、Hadley Wickham の素晴らしい解説を紹介し、その危険性を説明しています。
subset
(といった関数)。
[ここ]に
. 読んできてください。
少し長いので、ハドレーが使っている例の中で、「何が悪いのか」という問いに最も直接的に触れているものをここに記録しておくとよいでしょう。
Hadleyは次のような例を提示しています。次の関数を使用してデータフレームをサブセットし、並べ替えたいとします。
scramble <- function(x) x[sample(nrow(x)), ]
subscramble <- function(x, condition) {
scramble(subset(x, condition))
}
subscramble(mtcars, cyl == 4)
これはエラーを返します。
eval(expr, envir, enclos)でエラー:オブジェクト 'cyl' が見つかりません。
というのも、R はもはや 'cyl' というオブジェクトがどこにあるのか "know" 知らないからです。また、偶然にもグローバル環境に 'cyl' というオブジェクトがあった場合、本当に奇妙なことが起こる可能性があることも指摘されています。
cyl <- 4
subscramble(mtcars, cyl == 4)
cyl <- sample(10, 100, rep = T)
subscramble(mtcars, cyl == 4)
(実行してみて、自分で確かめてみてください。かなりおかしいです)
関連
-
Rでファイルを読み込む際に、そのようなファイルまたはディレクトリが見つかりません。
-
R - よくあるエラーとその原因 - 注意事項
-
Rによる系統的クラスタリング(階層)分析のグラフ形式の完全版
-
[解決済み] データフレームを結合(マージ)する方法(内側、外側、左側、右側)
-
[解決済み] 先頭と末尾の空白を削除するにはどうしたらよいですか?
-
[解決済み】data.table vs dplyr:一方がうまくできない、またはうまくできないことを行うことができますか?
-
[解決済み】ifelse()でDateオブジェクトがnumericオブジェクトにならないようにする方法
-
[解決済み】set.seed関数を使用する理由
-
[解決済み] [解答】なぜこれらの数字は等しくないのですか?
-
[解決済み] なぜrbindlistはrbindより「良い」のですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
R言語ダウンロード機能 download.fileとダウンロード解析
-
[解決済み] ネストされた plot_grid を同じサイズに拡大縮小するには?
-
[解決済み] Rの再現性のある優れた例題の作り方
-
[解決済み] 空のdata.frameを作成する
-
[解決済み] ggplot2 Rプロットで軸の制限を設定するには?
-
[解決済み] データフレーム内の列を名前でドロップする方法
-
[解決済み】set.seed関数を使用する理由
-
[解決済み] ggplot2 で個々のファセットにテキストをアノテートする
-
[解決済み] 2つの単語の最初の文字を大文字にします。
-
[解決済み] 複数の条件を組み合わせて、"OR "を使用してデータフレームをサブセットする方法は?