R矢量子集语法?

时间:2012-07-30 20:10:53

标签: r

我在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中进行某个分析过程的快速手册,我不想为了读者的利益而使用“只是因为”的解释。

1 个答案:

答案 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}}

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