[解決済み] リスト要素が存在するかどうかをテストするには?
2022-07-15 15:56:22
質問
問題点
リストの要素が存在するかどうかをテストしたいのですが、以下のような例があります。
foo <- list(a=1)
exists('foo')
TRUE #foo does exist
exists('foo$a')
FALSE #suggests that foo$a does not exist
foo$a
[1] 1 #but it does exist
この例では、私が知っているのは
foo$a
が存在することは知っていますが、このテストでは
FALSE
.
で調べたところ
?exists
を見てみると
with(foo, exists('a')
は
TRUE
を返しますが、なぜ
exists('foo$a')
が返す
FALSE
.
質問
-
なぜ
exists('foo$a')
を返すのか?FALSE
? -
の使用は
with(...)
を使用することが望ましいですか?
どのように解決するのですか?
これは、実は思っているよりも少し厄介なことです。リストは実際には (多少の努力で) NULL 要素を含むことができるため、リスト内の NULL 要素をチェックするには
is.null(foo$a)
. より厳密なテストは、名前が実際にリストで定義されているかどうかをチェックすることかもしれません。
foo <- list(a=42, b=NULL)
foo
is.null(foo[["a"]]) # FALSE
is.null(foo[["b"]]) # TRUE, but the element "exists"...
is.null(foo[["c"]]) # TRUE
"a" %in% names(foo) # TRUE
"b" %in% names(foo) # TRUE
"c" %in% names(foo) # FALSE
...そして
foo[["a"]]
よりも安全です。
foo$a
よりも安全です。後者は部分マッチを使うので、より長い名前にもマッチするかもしれないからです。
x <- list(abc=4)
x$a # 4, since it partially matches abc
x[["a"]] # NULL, no match
[UPDATE] では、質問に戻りますが、なぜ
exists('foo$a')
が機能しないのかという疑問に戻ります。その
exists
関数は変数が環境に存在するかどうかをチェックするだけで、 オブジェクトの一部が存在するかどうかをチェックするわけではありません。文字列
"foo$a"
は文学的に解釈されます。foo$a" という変数があるか? ...そして答えは
FALSE
...
foo <- list(a=42, b=NULL) # variable "foo" with element "a"
"bar$a" <- 42 # A variable actually called "bar$a"...
ls() # will include "foo" and "bar$a"
exists("foo$a") # FALSE
exists("bar$a") # TRUE
関連
-
[解決済み] ベクトルが与えられた要素を含むかどうかをテストする
-
[解決済み] Rの再現性のある優れた例題の作り方
-
[解決済み] データフレームを結合(マージ)する方法(内側、外側、左側、右側)
-
[解決済み] データフレームの行を複数の列でソート(並び替え)する。
-
[解決済み] 非常に大きなテーブルをデータフレームとして高速に読み込む
-
[解決済み] Rでtrycatchの書き方
-
[解決済み] ggplot2 Rプロットで軸の制限を設定するには?
-
[解決済み】data.table vs dplyr:一方がうまくできない、またはうまくできないことを行うことができますか?
-
[解決済み】data.frameのカラムを因子から文字に変換する
-
[解決済み】Roxygen2を使ってS4クラススロットを適切にドキュメント化する方法は?
最新
-
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言語
-
[解決済み] HTML、PDF、DOCXで見栄えのするシンプルな手動のRMarkdownテーブル
-
[解決済み] ggplot 2.0.0でのポイントサイズ
-
[解決済み] ネストされた plot_grid を同じサイズに拡大縮小するには?
-
[解決済み] Rの代入演算子"="と"<-"の違いは何ですか?
-
[解決済み] リストやデータフレームの要素にアクセスするためのブラケット[ ]とダブルブラケット[[ ]]の違いについて
-
[解決済み] Rでロードされているパッケージのバージョンを調べるには?
-
[解決済み] Rでオブジェクト(変数)が定義されているかどうかを確認するには?
-
[解決済み] [Solved] data.frameのカラムをベクトルに変換する?
-
[解決済み] 2つの単語の最初の文字を大文字にします。