gpt4 book ai didi

r - 在 R 中,如何检查列表是否包含特定键?

转载 作者:行者123 更新时间:2023-12-03 21:19:00 25 4
gpt4 key购买 nike

假设我有一个如下列表

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

这给出了同样的错误。

我现在有两个问题。如何检查列表是否包含 key ?
以及如何检查表达式是否为空?

最佳答案

“键”的概念在 R 中称为“名称”。

if ("bar" %in% names(foo) ) {  print("it's there") }  # ....
它们存储在一个名为 .Names 的特殊属性中。并使用 names 提取功能:
dput(foo)
#structure(list(bar = "hello world"), .Names = "bar")
我在这里提出语义上的警告,因为这个词的两种不同用法会导致混淆的常见来源: R 中的“名称”:有 .Names -属性,但是 name 这个词的用法完全不同在 R 中,与字符串或标记有关,其值独立于任何检查或提取函数,如 $[ .任何以字母或句点开头并且没有其他特殊字符的标记都可以是有效的 name .可以使用函数 exists 对其进行测试。给出其 name 的引用版本:
 exists("foo")  # TRUE
#assume ‘foo’ is a list with a named element “bar”
exists(”bar”) # [1] FALSE (even though it’s a “name”
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

关于r - 在 R 中,如何检查列表是否包含特定键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19942405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com