当字符串不匹配时,我希望NULL返回而不是返回整数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当字符串不匹配时,我希望NULL返回而不是返回整数相关的知识,希望对你有一定的参考价值。

在以下代码中,当字符串不匹配时,即在"b"列表中搜索reviews时,我应该得到NULL。但我得到了integer(0)。如何强制它为null。 is.null似乎不起作用。

names <- c("a","b")
reviews <- c("a","d")

for (i in seq_len(length(names))) {       
  x <-which(names[i]==reviews)
  print(x)
  print(is.null(x))
  print(!is.null(x))
}
#[1] 1
#[1] FALSE
#[1] TRUE
#integer(0)
#[1] FALSE
#[1] TRUE

提前致谢

答案

为什么你认为它“应该”返回NULL?是否记录了which(c(FALSE,FALSE))返回NULL的地方?不,which的帮助说:

 If ‘arr.ind == FALSE’ (the default), an integer vector with
 ‘length’ equal to ‘sum(x)’, i.e., to the number of ‘TRUE’s in ‘x’;

有多少TRUE?零。那么你又回来了什么?长度为零的整数向量-integer(0)。这和NULL不一样。

NULL通常被保留用于某种意义上的undefined,但在这种情况下它不是返回的。

如果你想捕获这种情况,请测试length(z)==0,如果TRUE是零长度矢量(任何类型,它可能是z,取决于你的应用),这将是character(0)

以上是关于当字符串不匹配时,我希望NULL返回而不是返回整数的主要内容,如果未能解决你的问题,请参考以下文章

与where子句查询的Eloquent嵌套关系在false条件下返回集合

ConfigurationManager 返回 null 而不是字符串值

未找到匹配记录时返回 NULL

当 GET 返回 null 而不是 List 时 KotlinxSerializer 出现 NullPointerException

如果找不到元素,我不希望此方法返回 null

外部应用在不匹配时意外返回列NOT NULL