R 如何让stopifnot()在调用列表中缺少的(NULL)元素时返回错误?

R 如何让stopifnot()在调用列表中缺少的(NULL)元素时返回错误?,r,testing,R,Testing,使用stopifnot(),如何测试列表中的元素,同时检查元素本身是否存在 例如,li是一个列表,其中包含一个项。我要确保该项等于0 li <- list() li$item <- 1 stopifnot(li$item == 0) # Error: l$x == 0 is not TRUE R不返回错误。即使列表中不存在此元素: li$tem # NULL 为什么R不告诉我列表中找不到元素“tem” li$tem == 0 计算结果为逻辑(0)。这里的问题不在于stopifn

使用stopifnot(),如何测试列表中的元素,同时检查元素本身是否存在

例如,li是一个列表,其中包含一个项。我要确保该项等于0

li <- list()
li$item <- 1
stopifnot(li$item == 0)
# Error: l$x == 0 is not TRUE
R不返回错误。即使列表中不存在此元素:

li$tem
# NULL
为什么R不告诉我列表中找不到元素“tem”

li$tem == 0

计算结果为逻辑(0)。

这里的问题不在于
stopifnot()
函数,而是使用
==
进行比较:

#返回一个空的逻辑向量,不是真或假:
li$tem==0#逻辑(0)
#根据?`=`我们应该使用idential()而不是==:
完全相同(li$tem,0)#返回FALSE
#现在,它可以正常工作,即抛出一个错误:
stopifnot(相同(li$tem,0))
?“==”

不要使用==和!=对于测试,例如在if表达式中,必须获得一个TRUE或FALSE。除非您完全确定不会发生任何异常情况,否则应使用相同的函数


谢谢,我看过雷同的,但不用麻烦用它。现在的问题是一个数字是整数,另一个是数字。我必须将一个数字转换为整数,这样我才能比较这些数字。没错,indentical()还可以查看向量的类型,因此如果您只想检查“近似相等”,可以使用isTRUE(all.equal(li$tem,0)),但我不建议这样做。最好使用相同(x,0L)来检查x是否为整数0。谢谢,我忘记了数字声明末尾的
L
使其为整数。写入
0L
比将
写入.integer(0)
要短得多。如果有人想知道为什么
stopifnot()
不会给出逻辑(0)错误,请参阅:
li$tem == 0