我在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中进行某个分析过程的快速手册,我不想为了读者的利益而使用“只是因为”的解释。
答案 0 :(得分:4)
您想要的运营商是%in%
:
Date[xlabs %in% i]
=
并没有按照您的想法行事。在示例的最后一行之后查看xlabs
;您将xlabs
设置为i
,就好像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
这样做:
length(xlabs)
R通过重复它来回收较短的矢量以匹配较长的矢量。由于length(i)
不是> 1[FALSE]
numeric(0)
的确切倍数,您会收到警告,但是比较本身并没有选择任何内容
{{1}}
因此空向量(在您的情况下是空字符向量)。