簡體   English   中英

在R中,如何檢查列表是否包含特定鍵?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM