R向量子集的语法?

问题描述:

我在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

为什么不只是'Date [i]'? – 2012-07-30 20:14:29

+1

逻辑等于将向量应用于单个值,而不是向量应用于向量。你正在寻找'%in%'。 'Date [xlabs%in%i]' – Justin 2012-07-30 20:14:30

+0

@Justin:逻辑等于可以将一个向量应用于一个向量,它只是将它们作为元素 – 2012-07-30 20:15:13

你想要的操作是%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)不是的整数倍length(i)你得到警告,但它是没有任何选择

> 1[FALSE] 
numeric(0) 

因此空载体(在你的情况下,空字符向量)的比较本身。

+1

+1或者,在这种情况下,只是'Date [i]'。 '%in%'很好,如果'xlabs'可能不是连续的整数从1开始。 – 2012-07-30 20:17:23

+0

非常好的答案,我明白你的意思与比较。这就是为什么'=='在我开始以1开始的范围内工作的原因。我查看了我的xlabs,它和启动时一样。这里是我的代码'> i = 1:8 > xlabs [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... > Date [xlabs = i] [1]“2011-07-18”“2011-07-19”“2011-07-20”“2011-07-21”“2011-07-22”“2011-07-23” [7]“ 2011-07-24“”2011-07-25“ > xlabs [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ' – 2012-07-30 20:29:37

+0

PS抱歉可怕的格式 – 2012-07-30 20:30:03