0

我在 R 中工作,发现了一个奇怪的行为。我可以解决它,但它看起来很奇怪,所以我想知道是否有人可以解释为什么我得到以下输出:

> xlabs <- 1:367
> i <- c(2:5)
> Date[xlabs == i]
character(0)
Warning message:
In xlabs == i :
  longer object length is not a multiple of shorter object length
> Date[xlabs = i]
[1] "2011-07-19" "2011-07-20" "2011-07-21" "2011-07-22"

我不明白为什么逻辑等号不适用于这种情况,但简单的等号可以。我正在写一本关于如何在 R 中进行特定分析过程的快速手册,我不想为了我的读者而使用“仅仅因为”的解释。

4

1 回答 1

4

您想要的运算符是%in%

Date[xlabs %in% i]

=没有做你认为的那样。查看示例xlabs 最后一行;您正在设置xlabsi好像您所做xlabs <- i的那样=几乎可以替代<-.

==不起作用,因为它进行比较的方式。考虑:

> 1:10 == 5:7
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Warning message:
In 1:10 == 5:7 :
  longer object length is not a multiple of shorter object length

那是在做:

> 1 == 5
[1] FALSE
> 2 == 6
[1] FALSE
> 3 == 7
[1] FALSE
> 4 == 5
[1] FALSE
> 5 == 6
[1] FALSE
> 6 == 7
[1] FALSE
> 7 == 5
[1] FALSE
> 8 == 6
[1] FALSE
> 9 == 7
[1] FALSE
> 10 == 5
[1] FALSE

R 通过重复较短的向量以匹配较长向量的长度来回收较短的向量。因为length(xlabs)不是length(i)你得到警告的确切倍数,但比较本身没有选择任何东西

> 1[FALSE]
numeric(0)

因此是空向量(在您的情况下是空字符向量)。

于 2012-07-30T20:16:02.543 回答