[英]In R, how can I check whether a list contains a particular key?
假設我有一個如下列表
foo=list(bar="hello world")
我想檢查一下我的列表是否有特定的密鑰。 我觀察foo$bar2
將返回NULL
任何bar2
這不等於bar
,所以我想我可以檢查返回值是否為空,但這似乎並沒有工作:
if (foo$bar2==NULL) 1 # do something here
但是,這會給出錯誤:
Error in if (foo$bar2 == NULL) 1 : argument is of length zero
然后我嘗試NULL是否等於false,就像在C中一樣:
if (foo$bar2) 1 # do something here
這給出了同樣的錯誤。
我現在有兩個問題。 如何檢查列表是否包含密鑰? 我如何檢查表達式是否為空?
“鍵”的概念在R中稱為“名稱”。
if ("bar" %in% names(foo) ) { print("it's there") } # ....
它們存儲在名為.Names
的特殊屬性中,並使用names
函數提取:
dput(foo)
#structure(list(bar = "hello world"), .Names = "bar")
我在這里提出了一個語義上的謹慎,因為由於兩個不同的使用單詞導致混淆的常見原因:R中的“名稱”:有.Names
,但R中的單詞name
有完全不同的用法與字符串或標記有關,這些字符串或標記的值獨立於任何檢查或提取函數,如$
或[
。 任何以字母或句點開頭並且其中包含其他特殊字符的標記都可以是有效name
。 人們可以用功能測試它exists
給其的報價版本name
:
exists("foo") # TRUE
exists(foo$bar) # [1] FALSE
exists("foo$bar")# [1] FALSE
因此,單詞name
在R中有兩個不同的含義,您需要了解這種歧義,以了解語言的部署方式。 .Names
含義是指具有特殊用途的屬性,而names
含義則指的是所謂的“語言對象”。 單詞symbol
是該單詞的第二個含義的同義詞。
is.name( quote(foo) ) #[1] TRUE
然后展示你關於測試無效的第二個問題可能會如何:
if( !is.null(foo$bar) ) { print("it's there") } # any TRUE value will be a 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.